1 1.1 jruoho # $NetBSD: t_sort.sh,v 1.1 2012/03/17 16:33:15 jruoho Exp $ 2 1.1 jruoho # 3 1.1 jruoho # Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. 4 1.1 jruoho # All rights reserved. 5 1.1 jruoho # 6 1.1 jruoho # Redistribution and use in source and binary forms, with or without 7 1.1 jruoho # modification, are permitted provided that the following conditions 8 1.1 jruoho # are met: 9 1.1 jruoho # 1. Redistributions of source code must retain the above copyright 10 1.1 jruoho # notice, this list of conditions and the following disclaimer. 11 1.1 jruoho # 2. Redistributions in binary form must reproduce the above copyright 12 1.1 jruoho # notice, this list of conditions and the following disclaimer in the 13 1.1 jruoho # documentation and/or other materials provided with the distribution. 14 1.1 jruoho # 15 1.1 jruoho # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16 1.1 jruoho # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17 1.1 jruoho # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 1.1 jruoho # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19 1.1 jruoho # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 1.1 jruoho # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 1.1 jruoho # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 1.1 jruoho # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 1.1 jruoho # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 1.1 jruoho # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 1.1 jruoho # POSSIBILITY OF SUCH DAMAGE. 26 1.1 jruoho # 27 1.1 jruoho 28 1.1 jruoho atf_test_case basic 29 1.1 jruoho basic_head() 30 1.1 jruoho { 31 1.1 jruoho atf_set "descr" "Basic functionality test" 32 1.1 jruoho } 33 1.1 jruoho basic_body() 34 1.1 jruoho { 35 1.1 jruoho cat >in <<EOF 36 1.1 jruoho z b m f 37 1.1 jruoho y c o e 38 1.1 jruoho x a n h 39 1.1 jruoho x a n g 40 1.1 jruoho EOF 41 1.1 jruoho 42 1.1 jruoho cat >expout <<EOF 43 1.1 jruoho x a n g 44 1.1 jruoho x a n h 45 1.1 jruoho y c o e 46 1.1 jruoho z b m f 47 1.1 jruoho EOF 48 1.1 jruoho 49 1.1 jruoho atf_check -o file:expout sort in 50 1.1 jruoho } 51 1.1 jruoho 52 1.1 jruoho atf_test_case empty_file 53 1.1 jruoho empty_file_head() 54 1.1 jruoho { 55 1.1 jruoho atf_set "descr" "Tests sorting an empty file" 56 1.1 jruoho } 57 1.1 jruoho empty_file_body() 58 1.1 jruoho { 59 1.1 jruoho touch empty 60 1.1 jruoho atf_check -o empty sort -S empty 61 1.1 jruoho atf_check sort -S -c empty 62 1.1 jruoho atf_check sort -S -c -u empty 63 1.1 jruoho } 64 1.1 jruoho 65 1.1 jruoho atf_test_case end_of_options 66 1.1 jruoho end_of_options_head() 67 1.1 jruoho { 68 1.1 jruoho atf_set "descr" "Determination of end of option list" 69 1.1 jruoho } 70 1.1 jruoho end_of_options_body() 71 1.1 jruoho { 72 1.1 jruoho echo x >-k 73 1.1 jruoho atf_check -o file:-k -x "sort -S -- -k </dev/null" 74 1.1 jruoho atf_check -s not-exit:1 -e ignore -x "sort -S - -c </dev/null" 75 1.1 jruoho } 76 1.1 jruoho 77 1.1 jruoho atf_test_case missing_newline 78 1.1 jruoho missing_newline_head() 79 1.1 jruoho { 80 1.1 jruoho atf_set "descr" "Tests with missing new line in input file" 81 1.1 jruoho } 82 1.1 jruoho missing_newline_body() 83 1.1 jruoho { 84 1.1 jruoho printf '%s' x >in 85 1.1 jruoho atf_check -o inline:'x\n' sort in 86 1.1 jruoho } 87 1.1 jruoho 88 1.1 jruoho atf_test_case null_bytes 89 1.1 jruoho null_bytes_head() 90 1.1 jruoho { 91 1.1 jruoho atf_set "descr" "Tests the behavior of null bytes" 92 1.1 jruoho } 93 1.1 jruoho null_bytes_body() 94 1.1 jruoho { 95 1.1 jruoho printf '\0b\n\0a\n' >in 96 1.1 jruoho atf_check -o inline:'\0a\n\0b\n' sort -S in 97 1.1 jruoho } 98 1.1 jruoho 99 1.1 jruoho atf_test_case long_records 100 1.1 jruoho long_records_head() 101 1.1 jruoho { 102 1.1 jruoho atf_set "descr" "Tests long lines and keys" 103 1.1 jruoho } 104 1.1 jruoho long_records_body() 105 1.1 jruoho { 106 1.1 jruoho awk 'BEGIN { x="x" 107 1.1 jruoho for(i=1; i<=12; i++) x = x x 108 1.1 jruoho for(i=15; i<=25; i++) print x i 109 1.1 jruoho }' >in 110 1.1 jruoho 111 1.1 jruoho awk 'BEGIN { x="x" 112 1.1 jruoho for(i=1; i<=12; i++) x = x x 113 1.1 jruoho for(i=25; i>=15; i--) print x i 114 1.1 jruoho }' >out 115 1.1 jruoho 116 1.1 jruoho atf_check -o file:out sort -r in 117 1.1 jruoho atf_check -o file:out sort -k 1,1r -k 1 in 118 1.1 jruoho } 119 1.1 jruoho 120 1.1 jruoho atf_test_case long_file 121 1.1 jruoho long_file_head() 122 1.1 jruoho { 123 1.1 jruoho atf_set "descr" "Tests with a long file to try to force intermediate" \ 124 1.1 jruoho "files" 125 1.1 jruoho } 126 1.1 jruoho long_file_body() 127 1.1 jruoho { 128 1.1 jruoho awk 'BEGIN { for(i=0; i<20000; i++) print rand() }' >in 129 1.1 jruoho sort -S -r in | awk '$0 "x" != x { print ; x = $0 "x" }' >out 130 1.1 jruoho atf_check -o file:out sort -u -r in 131 1.1 jruoho } 132 1.1 jruoho 133 1.1 jruoho atf_test_case any_char 134 1.1 jruoho any_char_head() 135 1.1 jruoho { 136 1.1 jruoho atf_set "descr" "Tests with files containing non-printable/extended" \ 137 1.1 jruoho "characters" 138 1.1 jruoho } 139 1.1 jruoho any_char_body() 140 1.1 jruoho { 141 1.1 jruoho atf_check -o file:$(atf_get_srcdir)/d_any_char_dflag_out.txt \ 142 1.1 jruoho sort -d -k 2 $(atf_get_srcdir)/d_any_char_in.txt 143 1.1 jruoho 144 1.1 jruoho atf_check -o file:$(atf_get_srcdir)/d_any_char_fflag_out.txt \ 145 1.1 jruoho sort -f -k 2 $(atf_get_srcdir)/d_any_char_in.txt 146 1.1 jruoho 147 1.1 jruoho atf_check -o file:$(atf_get_srcdir)/d_any_char_iflag_out.txt \ 148 1.1 jruoho sort -i -k 2 $(atf_get_srcdir)/d_any_char_in.txt 149 1.1 jruoho } 150 1.1 jruoho 151 1.1 jruoho atf_test_case bflag 152 1.1 jruoho bflag_head() 153 1.1 jruoho { 154 1.1 jruoho atf_set "descr" "Tests the -b flag" 155 1.1 jruoho } 156 1.1 jruoho bflag_body() 157 1.1 jruoho { 158 1.1 jruoho cat >in <<EOF 159 1.1 jruoho b 160 1.1 jruoho a 161 1.1 jruoho EOF 162 1.1 jruoho 163 1.1 jruoho atf_check -o file:in sort -b in 164 1.1 jruoho atf_check -o file:in -x "sort -b <in" 165 1.1 jruoho atf_check -s exit:1 -o ignore -e ignore -x "sort in | sort -c -r" 166 1.1 jruoho } 167 1.1 jruoho 168 1.1 jruoho atf_test_case cflag 169 1.1 jruoho cflag_head() 170 1.1 jruoho { 171 1.1 jruoho atf_set "descr" "Tests the -c flag" 172 1.1 jruoho } 173 1.1 jruoho cflag_body() 174 1.1 jruoho { 175 1.1 jruoho cat >in <<EOF 176 1.1 jruoho b 177 1.1 jruoho a 178 1.1 jruoho EOF 179 1.1 jruoho 180 1.1 jruoho atf_check -s exit:1 -e ignore sort -S -c in 181 1.1 jruoho } 182 1.1 jruoho 183 1.1 jruoho atf_test_case kflag_one_field 184 1.1 jruoho kflag_one_field_head() 185 1.1 jruoho { 186 1.1 jruoho atf_set "descr" "Tests the -k flag with one field" 187 1.1 jruoho } 188 1.1 jruoho kflag_one_field_body() 189 1.1 jruoho { 190 1.1 jruoho cat >in <<EOF 191 1.1 jruoho z b m f 192 1.1 jruoho y c o e 193 1.1 jruoho x a n h 194 1.1 jruoho x a n g 195 1.1 jruoho EOF 196 1.1 jruoho 197 1.1 jruoho cat >expout <<EOF 198 1.1 jruoho x a n g 199 1.1 jruoho x a n h 200 1.1 jruoho z b m f 201 1.1 jruoho y c o e 202 1.1 jruoho EOF 203 1.1 jruoho 204 1.1 jruoho atf_check -o file:expout sort -k2.1 in 205 1.1 jruoho } 206 1.1 jruoho 207 1.1 jruoho atf_test_case kflag_two_fields 208 1.1 jruoho kflag_two_fields_head() 209 1.1 jruoho { 210 1.1 jruoho atf_set "descr" "Tests the -k flag with two fields" 211 1.1 jruoho } 212 1.1 jruoho kflag_two_fields_body() 213 1.1 jruoho { 214 1.1 jruoho cat >in <<EOF 215 1.1 jruoho z b m f 216 1.1 jruoho y c o e 217 1.1 jruoho x a n h 218 1.1 jruoho x a n g 219 1.1 jruoho EOF 220 1.1 jruoho 221 1.1 jruoho cat >expout <<EOF 222 1.1 jruoho x a n h 223 1.1 jruoho x a n g 224 1.1 jruoho z b m f 225 1.1 jruoho y c o e 226 1.1 jruoho EOF 227 1.1 jruoho atf_check -o file:expout sort -k2.1,2.0 in 228 1.1 jruoho } 229 1.1 jruoho 230 1.1 jruoho atf_test_case kflag_many_fields 231 1.1 jruoho kflag_many_fields_head() 232 1.1 jruoho { 233 1.1 jruoho atf_set "descr" "Tests the -k flag with many fields" 234 1.1 jruoho } 235 1.1 jruoho kflag_many_fields_body() 236 1.1 jruoho { 237 1.1 jruoho cat >in <<EOF 238 1.1 jruoho 0:2:3:4:5:6:7:8:9 239 1.1 jruoho 1:1:3:4:5:6:7:8:9 240 1.1 jruoho 1:2:2:4:5:6:7:8:9 241 1.1 jruoho 1:2:3:3:5:6:7:8:9 242 1.1 jruoho 1:2:3:4:4:6:7:8:9 243 1.1 jruoho 1:2:3:4:5:5:7:8:9 244 1.1 jruoho 1:2:3:4:5:6:6:8:9 245 1.1 jruoho 1:2:3:4:5:6:7:7:9 246 1.1 jruoho 1:2:3:4:5:6:7:8:8 247 1.1 jruoho EOF 248 1.1 jruoho 249 1.1 jruoho cat >out <<EOF 250 1.1 jruoho 1:2:3:4:5:6:7:8:8 251 1.1 jruoho 1:2:3:4:5:6:7:7:9 252 1.1 jruoho 1:2:3:4:5:6:6:8:9 253 1.1 jruoho 1:2:3:4:5:5:7:8:9 254 1.1 jruoho 1:2:3:4:4:6:7:8:9 255 1.1 jruoho 1:2:3:3:5:6:7:8:9 256 1.1 jruoho 1:2:2:4:5:6:7:8:9 257 1.1 jruoho 1:1:3:4:5:6:7:8:9 258 1.1 jruoho 0:2:3:4:5:6:7:8:9 259 1.1 jruoho EOF 260 1.1 jruoho 261 1.1 jruoho atf_check -o file:out sort -t: -k9 -k8 -k7 -k6 -k5 -k4 -k3 \ 262 1.1 jruoho -k2 -k1 in 263 1.1 jruoho } 264 1.1 jruoho 265 1.1 jruoho atf_test_case kflag_outofbounds 266 1.1 jruoho kflag_outofbounds_head() 267 1.1 jruoho { 268 1.1 jruoho atf_set "descr" "Tests the -k flag with out of bounds fields" 269 1.1 jruoho } 270 1.1 jruoho kflag_outofbounds_body() 271 1.1 jruoho { 272 1.1 jruoho cat >in <<EOF 273 1.1 jruoho 0 5 274 1.1 jruoho 1 4 275 1.1 jruoho 2 3 276 1.1 jruoho 3 2 277 1.1 jruoho 4 1 278 1.1 jruoho 5 0 279 1.1 jruoho EOF 280 1.1 jruoho 281 1.1 jruoho atf_check -o file:in sort -k2.2,2.1 -k2.3,2.4 in 282 1.1 jruoho } 283 1.1 jruoho 284 1.1 jruoho atf_test_case kflag_nonmonotone 285 1.1 jruoho kflag_nonmonotone_head() 286 1.1 jruoho { 287 1.1 jruoho atf_set "descr" "Tests the -k flag with apparently nonmonotone" \ 288 1.1 jruoho "field specs" 289 1.1 jruoho } 290 1.1 jruoho kflag_nonmonotone_body() 291 1.1 jruoho { 292 1.1 jruoho cat >in <<EOF 293 1.1 jruoho aaaa c 294 1.1 jruoho x a 295 1.1 jruoho 0 b 296 1.1 jruoho EOF 297 1.1 jruoho 298 1.1 jruoho atf_check -o file:in sort -k2,1.3 -k2.5,2.5 in 299 1.1 jruoho } 300 1.1 jruoho 301 1.1 jruoho atf_test_case kflag_limits 302 1.1 jruoho kflag_limits_head() 303 1.1 jruoho { 304 1.1 jruoho atf_set "descr" "Tests the -k flag field limits" 305 1.1 jruoho } 306 1.1 jruoho kflag_limits_body() 307 1.1 jruoho { 308 1.1 jruoho cat >in <<EOF 309 1.1 jruoho a 2 310 1.1 jruoho a 1 311 1.1 jruoho b 2 312 1.1 jruoho b 1 313 1.1 jruoho EOF 314 1.1 jruoho 315 1.1 jruoho cat >out <<EOF 316 1.1 jruoho b 2 317 1.1 jruoho b 1 318 1.1 jruoho a 2 319 1.1 jruoho a 1 320 1.1 jruoho EOF 321 1.1 jruoho 322 1.1 jruoho atf_check -o file:out sort -r -k1,1 -k2n in 323 1.1 jruoho } 324 1.1 jruoho 325 1.1 jruoho atf_test_case kflag_alpha 326 1.1 jruoho kflag_alpha_head() 327 1.1 jruoho { 328 1.1 jruoho atf_set "descr" "Tests the -k flag with various alpha fields" 329 1.1 jruoho } 330 1.1 jruoho kflag_alpha_body() 331 1.1 jruoho { 332 1.1 jruoho sort >in <<EOF 333 1.1 jruoho 01:04:19:01:16:01:21:01 a 334 1.1 jruoho 02:03:13:15:13:19:15:02 a 335 1.1 jruoho 03:02:07:09:07:13:09:03 a 336 1.1 jruoho 04:01:01:03:01:07:03:04 a 337 1.1 jruoho 05:08:20:16:17:02:20:05 aa 338 1.1 jruoho 06:07:14:18:14:20:14:06 aa 339 1.1 jruoho 07:06:08:10:08:14:08:07 aa 340 1.1 jruoho 08:05:02:04:02:08:02:08 aa 341 1.1 jruoho 09:16:22:02:22:04:24:13 b 342 1.1 jruoho 10:15:16:20:19:22:18:14 b 343 1.1 jruoho 11:14:10:12:10:16:12:15 b 344 1.1 jruoho 12:13:04:06:04:10:06:16 b 345 1.1 jruoho 13:24:24:22:24:06:22:21 bb 346 1.1 jruoho 14:23:18:24:21:24:16:22 bb 347 1.1 jruoho 15:22:12:14:12:18:10:23 bb 348 1.1 jruoho 16:21:06:08:06:12:04:24 bb 349 1.1 jruoho 17:12:21:21:18:03:19:09 ab 350 1.1 jruoho 18:11:15:19:15:21:13:10 ab 351 1.1 jruoho 19:10:09:11:09:15:07:11 ab 352 1.1 jruoho 20:09:03:05:03:09:01:12 ab 353 1.1 jruoho 21:20:23:17:23:05:23:17 ba 354 1.1 jruoho 22:19:17:23:20:23:17:18 ba 355 1.1 jruoho 23:18:11:13:11:17:11:19 ba 356 1.1 jruoho 24:17:05:07:05:11:05:20 ba 357 1.1 jruoho EOF 358 1.1 jruoho 359 1.1 jruoho atf_check -x "sort -S -k2b -k2 in >xx" 360 1.1 jruoho atf_check -e ignore sort -c -t: -k2n xx 361 1.1 jruoho 362 1.1 jruoho atf_check -x "sort -S -k2,2.1b -k2 in >xx" 363 1.1 jruoho atf_check -e ignore sort -c -t: -k3n xx 364 1.1 jruoho 365 1.1 jruoho atf_check -x "sort -S -k2.3 -k2 in >xx" 366 1.1 jruoho atf_check -e ignore sort -c -t: -k4n xx 367 1.1 jruoho 368 1.1 jruoho atf_check -x "sort -S -k2b,2.3 -k2 in >xx" 369 1.1 jruoho atf_check -e ignore sort -c -t: -k5n xx 370 1.1 jruoho 371 1.1 jruoho atf_check -x "sort -S -k2.3,2.1b -k2 in >xx" 372 1.1 jruoho atf_check -e ignore sort -c -t: -k6n xx 373 1.1 jruoho 374 1.1 jruoho atf_check -x "sort -S -k2,2.1b -k2r in >xx" 375 1.1 jruoho atf_check -e ignore sort -c -t: -k7n xx 376 1.1 jruoho 377 1.1 jruoho atf_check -x "sort -S -b -k2,2 -k2 in >xx" 378 1.1 jruoho atf_check -e ignore sort -c -t: -k8n xx 379 1.1 jruoho 380 1.1 jruoho # XXX This test is broken. The standard is not clear on the behavior. 381 1.1 jruoho #atf_check -x "sort -S -b -k2,2b -k2 in >xx" 382 1.1 jruoho #atf_check -e ignore sort -c -t: -k3n xx 383 1.1 jruoho } 384 1.1 jruoho 385 1.1 jruoho atf_test_case kflag_no_end 386 1.1 jruoho kflag_no_end_head() 387 1.1 jruoho { 388 1.1 jruoho atf_set "descr" "Tests the -k flag with a field without end" 389 1.1 jruoho } 390 1.1 jruoho kflag_no_end_body() 391 1.1 jruoho { 392 1.1 jruoho cat >in <<EOF 393 1.1 jruoho a-B 394 1.1 jruoho a+b 395 1.1 jruoho a b 396 1.1 jruoho A+b 397 1.1 jruoho a b 398 1.1 jruoho EOF 399 1.1 jruoho 400 1.1 jruoho cat >out <<EOF 401 1.1 jruoho a b 402 1.1 jruoho a b 403 1.1 jruoho A+b 404 1.1 jruoho a-B 405 1.1 jruoho a+b 406 1.1 jruoho EOF 407 1.1 jruoho 408 1.1 jruoho atf_check -o file:out sort -df -k 1 -k 1d <in 409 1.1 jruoho } 410 1.1 jruoho 411 1.1 jruoho atf_test_case mflag 412 1.1 jruoho mflag_head() 413 1.1 jruoho { 414 1.1 jruoho atf_set "descr" "Tests the -m flag" 415 1.1 jruoho } 416 1.1 jruoho mflag_body() 417 1.1 jruoho { 418 1.1 jruoho cat >in1 <<EOF 419 1.1 jruoho a 420 1.1 jruoho ab 421 1.1 jruoho ab 422 1.1 jruoho bc 423 1.1 jruoho ca 424 1.1 jruoho EOF 425 1.1 jruoho cat >in2 <<EOF 426 1.1 jruoho Z 427 1.1 jruoho a 428 1.1 jruoho aa 429 1.1 jruoho ac 430 1.1 jruoho c 431 1.1 jruoho EOF 432 1.1 jruoho cat >out <<EOF 433 1.1 jruoho Z 434 1.1 jruoho a 435 1.1 jruoho a 436 1.1 jruoho aa 437 1.1 jruoho ab 438 1.1 jruoho ab 439 1.1 jruoho ac 440 1.1 jruoho bc 441 1.1 jruoho c 442 1.1 jruoho ca 443 1.1 jruoho EOF 444 1.1 jruoho 445 1.1 jruoho atf_check -o file:out sort -S -m in1 in2 446 1.1 jruoho } 447 1.1 jruoho 448 1.1 jruoho atf_test_case mflag_uflag 449 1.1 jruoho mflag_uflag_head() 450 1.1 jruoho { 451 1.1 jruoho atf_set "descr" "Tests the -m flag together with -u" 452 1.1 jruoho } 453 1.1 jruoho mflag_uflag_body() 454 1.1 jruoho { 455 1.1 jruoho cat >in <<EOF 456 1.1 jruoho a 457 1.1 jruoho b 458 1.1 jruoho c 459 1.1 jruoho d 460 1.1 jruoho EOF 461 1.1 jruoho 462 1.1 jruoho atf_check -o file:in sort -m -u in 463 1.1 jruoho } 464 1.1 jruoho 465 1.1 jruoho atf_test_case mflag_uflag_first 466 1.1 jruoho mflag_uflag_first_head() 467 1.1 jruoho { 468 1.1 jruoho atf_set "descr" "Tests that the -m flag together with -u picks the" \ 469 1.1 jruoho "first among equal" 470 1.1 jruoho } 471 1.1 jruoho mflag_uflag_first_body() 472 1.1 jruoho { 473 1.1 jruoho cat >in <<EOF 474 1.1 jruoho 3B 475 1.1 jruoho 3b 476 1.1 jruoho 3B2 477 1.1 jruoho ~3B2 478 1.1 jruoho 4.1 479 1.1 jruoho 41 480 1.1 jruoho 5 481 1.1 jruoho 5. 482 1.1 jruoho EOF 483 1.1 jruoho 484 1.1 jruoho cat >out <<EOF 485 1.1 jruoho 3B 486 1.1 jruoho 3B2 487 1.1 jruoho 4.1 488 1.1 jruoho 5 489 1.1 jruoho EOF 490 1.1 jruoho 491 1.1 jruoho atf_check -o file:out sort -mudf in 492 1.1 jruoho atf_check -o file:out sort -mudf -k1 in 493 1.1 jruoho } 494 1.1 jruoho 495 1.1 jruoho atf_test_case nflag 496 1.1 jruoho nflag_head() 497 1.1 jruoho { 498 1.1 jruoho atf_set "descr" "Tests the -n flag" 499 1.1 jruoho } 500 1.1 jruoho nflag_body() 501 1.1 jruoho { 502 1.1 jruoho cat >in <<EOF 503 1.1 jruoho -99.0 504 1.1 jruoho -99.1 505 1.1 jruoho -.0002 506 1.1 jruoho -10 507 1.1 jruoho 2 508 1.1 jruoho 0010.000000000000000000000000000000000001 509 1.1 jruoho 10 510 1.1 jruoho 3x 511 1.1 jruoho x 512 1.1 jruoho EOF 513 1.1 jruoho 514 1.1 jruoho cat >expout <<EOF 515 1.1 jruoho -99.1 516 1.1 jruoho -99.0 517 1.1 jruoho -10 518 1.1 jruoho -.0002 519 1.1 jruoho x 520 1.1 jruoho 2 521 1.1 jruoho 3x 522 1.1 jruoho 10 523 1.1 jruoho 0010.000000000000000000000000000000000001 524 1.1 jruoho EOF 525 1.1 jruoho 526 1.1 jruoho atf_check -o file:expout sort -n in 527 1.1 jruoho } 528 1.1 jruoho 529 1.1 jruoho atf_test_case nflag_rflag 530 1.1 jruoho nflag_rflag_head() 531 1.1 jruoho { 532 1.1 jruoho atf_set "descr" "Tests the -n and -r flag combination" 533 1.1 jruoho } 534 1.1 jruoho nflag_rflag_body() 535 1.1 jruoho { 536 1.1 jruoho cat >in <<EOF 537 1.1 jruoho 1 538 1.1 jruoho 123 539 1.1 jruoho 2 540 1.1 jruoho EOF 541 1.1 jruoho 542 1.1 jruoho cat >expout <<EOF 543 1.1 jruoho 123 544 1.1 jruoho 2 545 1.1 jruoho 1 546 1.1 jruoho EOF 547 1.1 jruoho 548 1.1 jruoho atf_check -o file:expout sort -rn in 549 1.1 jruoho } 550 1.1 jruoho 551 1.1 jruoho atf_test_case oflag 552 1.1 jruoho oflag_head() 553 1.1 jruoho { 554 1.1 jruoho atf_set "descr" "Tests the -o flag" 555 1.1 jruoho } 556 1.1 jruoho oflag_body() 557 1.1 jruoho { 558 1.1 jruoho cat >in <<EOF 559 1.1 jruoho 1 560 1.1 jruoho 1 561 1.1 jruoho 2 562 1.1 jruoho 2 563 1.1 jruoho 3 564 1.1 jruoho 3 565 1.1 jruoho 4 566 1.1 jruoho 4 567 1.1 jruoho EOF 568 1.1 jruoho 569 1.1 jruoho atf_check sort -u -o in in 570 1.1 jruoho 571 1.1 jruoho cat >expout <<EOF 572 1.1 jruoho 1 573 1.1 jruoho 2 574 1.1 jruoho 3 575 1.1 jruoho 4 576 1.1 jruoho EOF 577 1.1 jruoho 578 1.1 jruoho atf_check -o file:expout cat in 579 1.1 jruoho } 580 1.1 jruoho 581 1.1 jruoho atf_test_case oflag_displaced 582 1.1 jruoho oflag_displaced_head() 583 1.1 jruoho { 584 1.1 jruoho atf_set "descr" "Tests the -o flag after the file names" 585 1.1 jruoho } 586 1.1 jruoho oflag_displaced_body() 587 1.1 jruoho { 588 1.1 jruoho atf_check sort -S /dev/null -o out 589 1.1 jruoho test -f out || atf_fail "File not created" 590 1.1 jruoho } 591 1.1 jruoho 592 1.1 jruoho atf_test_case rflag 593 1.1 jruoho rflag_head() 594 1.1 jruoho { 595 1.1 jruoho atf_set "descr" "Tests the -r flag" 596 1.1 jruoho } 597 1.1 jruoho rflag_body() 598 1.1 jruoho { 599 1.1 jruoho cat >in <<EOF 600 1.1 jruoho z b m f 601 1.1 jruoho y c o e 602 1.1 jruoho x a n h 603 1.1 jruoho x a n g 604 1.1 jruoho EOF 605 1.1 jruoho 606 1.1 jruoho cat >expout <<EOF 607 1.1 jruoho z b m f 608 1.1 jruoho y c o e 609 1.1 jruoho x a n h 610 1.1 jruoho x a n g 611 1.1 jruoho EOF 612 1.1 jruoho 613 1.1 jruoho atf_check -o file:expout sort -r in 614 1.1 jruoho } 615 1.1 jruoho 616 1.1 jruoho atf_test_case sflag 617 1.1 jruoho sflag_head() 618 1.1 jruoho { 619 1.1 jruoho atf_set "descr" "Tests the -s flag" 620 1.1 jruoho } 621 1.1 jruoho sflag_body() 622 1.1 jruoho { 623 1.1 jruoho cat >in <<EOF 624 1.1 jruoho a 2 625 1.1 jruoho b 1 626 1.1 jruoho c 2 627 1.1 jruoho a 1 628 1.1 jruoho b 2 629 1.1 jruoho c 1 630 1.1 jruoho EOF 631 1.1 jruoho 632 1.1 jruoho cat >out <<EOF 633 1.1 jruoho a 2 634 1.1 jruoho a 1 635 1.1 jruoho b 1 636 1.1 jruoho b 2 637 1.1 jruoho c 2 638 1.1 jruoho c 1 639 1.1 jruoho EOF 640 1.1 jruoho 641 1.1 jruoho atf_check -o file:out sort -s -k1,1 in 642 1.1 jruoho } 643 1.1 jruoho 644 1.1 jruoho atf_test_case sflag_many_files 645 1.1 jruoho sflag_many_files_head() 646 1.1 jruoho { 647 1.1 jruoho atf_set "descr" "Tests the -s flag with multiple files" 648 1.1 jruoho } 649 1.1 jruoho sflag_many_files_body() 650 1.1 jruoho { 651 1.1 jruoho cat >in1 <<EOF 652 1.1 jruoho c 2 653 1.1 jruoho a 2 654 1.1 jruoho EOF 655 1.1 jruoho 656 1.1 jruoho cat >in2 <<EOF 657 1.1 jruoho c 1 658 1.1 jruoho b 1 659 1.1 jruoho a 1 660 1.1 jruoho EOF 661 1.1 jruoho 662 1.1 jruoho cat >out <<EOF 663 1.1 jruoho c 2 664 1.1 jruoho b 1 665 1.1 jruoho a 2 666 1.1 jruoho EOF 667 1.1 jruoho 668 1.1 jruoho atf_check -o file:out sort -smru -k1,1 in1 in1 in2 in2 669 1.1 jruoho } 670 1.1 jruoho 671 1.1 jruoho atf_test_case tflag 672 1.1 jruoho tflag_head() 673 1.1 jruoho { 674 1.1 jruoho atf_set "descr" "Tests the -t flag" 675 1.1 jruoho } 676 1.1 jruoho tflag_body() 677 1.1 jruoho { 678 1.1 jruoho cat >in <<EOF 679 1.1 jruoho a: 680 1.1 jruoho a! 681 1.1 jruoho EOF 682 1.1 jruoho 683 1.1 jruoho atf_check -o file:in sort -t : -r +0 in 684 1.1 jruoho atf_check -o file:in sort -t : +0 -1 in 685 1.1 jruoho atf_check -o file:in sort -t : -r -k 1 in 686 1.1 jruoho atf_check -o file:in sort -t : -k 1,1 in 687 1.1 jruoho } 688 1.1 jruoho 689 1.1 jruoho atf_test_case tflag_alphabetic 690 1.1 jruoho tflag_alphabetic_head() 691 1.1 jruoho { 692 1.1 jruoho atf_set "descr" "Tests the -t flag with a character as the delimiter" 693 1.1 jruoho } 694 1.1 jruoho tflag_alphabetic_body() 695 1.1 jruoho { 696 1.1 jruoho cat >in <<EOF 697 1.1 jruoho zXa 698 1.1 jruoho yXa 699 1.1 jruoho zXb 700 1.1 jruoho EOF 701 1.1 jruoho 702 1.1 jruoho atf_check -o file:in sort -tX -k2 -k1r,1 in 703 1.1 jruoho } 704 1.1 jruoho 705 1.1 jruoho atf_test_case tflag_char_pos 706 1.1 jruoho tflag_char_pos_head() 707 1.1 jruoho { 708 1.1 jruoho atf_set "descr" "Tests the -t flag with character positions in fields" 709 1.1 jruoho } 710 1.1 jruoho tflag_char_pos_body() 711 1.1 jruoho { 712 1.1 jruoho cat >in <<EOF 713 1.1 jruoho : ab 714 1.1 jruoho :bac 715 1.1 jruoho EOF 716 1.1 jruoho 717 1.1 jruoho cat >out <<EOF 718 1.1 jruoho :bac 719 1.1 jruoho : ab 720 1.1 jruoho EOF 721 1.1 jruoho 722 1.1 jruoho atf_check -o file:out sort -b -t: +1.1 in 723 1.1 jruoho atf_check -o file:out sort -t: +1.1r in 724 1.1 jruoho atf_check -o file:out sort -b -t: -k 2.2 in 725 1.1 jruoho atf_check -o file:out sort -t: -k 2.2r in 726 1.1 jruoho } 727 1.1 jruoho 728 1.1 jruoho atf_test_case tflag_whitespace 729 1.1 jruoho tflag_whitespace_head() 730 1.1 jruoho { 731 1.1 jruoho atf_set "descr" "Tests the -t flag with spaces and tabs as the" \ 732 1.1 jruoho "delimiter" 733 1.1 jruoho } 734 1.1 jruoho tflag_whitespace_body() 735 1.1 jruoho { 736 1.1 jruoho cat >in <<EOF 737 1.1 jruoho b c 738 1.1 jruoho b c 739 1.1 jruoho b c 740 1.1 jruoho EOF 741 1.1 jruoho 742 1.1 jruoho atf_check -o file:in sort -t ' ' -k2,2 in 743 1.1 jruoho atf_check -o file:in sort -t ' ' -k2.1,2.0 in 744 1.1 jruoho 745 1.1 jruoho cat >out <<EOF 746 1.1 jruoho b c 747 1.1 jruoho b c 748 1.1 jruoho b c 749 1.1 jruoho EOF 750 1.1 jruoho 751 1.1 jruoho atf_check -o file:out sort -t ' ' -k2,2 in 752 1.1 jruoho atf_check -o file:out sort -t ' ' -k2.1,2.0 in 753 1.1 jruoho 754 1.1 jruoho cat >out <<EOF 755 1.1 jruoho b c 756 1.1 jruoho b c 757 1.1 jruoho b c 758 1.1 jruoho EOF 759 1.1 jruoho 760 1.1 jruoho atf_check -o file:out sort -S -k2 in 761 1.1 jruoho 762 1.1 jruoho cat >out <<EOF 763 1.1 jruoho b c 764 1.1 jruoho b c 765 1.1 jruoho b c 766 1.1 jruoho EOF 767 1.1 jruoho 768 1.1 jruoho atf_check -o file:out sort -S -k2b in 769 1.1 jruoho } 770 1.1 jruoho 771 1.1 jruoho atf_test_case uflag 772 1.1 jruoho uflag_head() 773 1.1 jruoho { 774 1.1 jruoho atf_set "descr" "Tests the -u flag" 775 1.1 jruoho } 776 1.1 jruoho uflag_body() 777 1.1 jruoho { 778 1.1 jruoho cat >in <<EOF 779 1.1 jruoho a 780 1.1 jruoho aa 781 1.1 jruoho aaa 782 1.1 jruoho aa 783 1.1 jruoho EOF 784 1.1 jruoho 785 1.1 jruoho cat >expout <<EOF 786 1.1 jruoho a 787 1.1 jruoho aa 788 1.1 jruoho aaa 789 1.1 jruoho EOF 790 1.1 jruoho 791 1.1 jruoho atf_check -o file:expout sort -u in 792 1.1 jruoho } 793 1.1 jruoho 794 1.1 jruoho atf_test_case uflag_rflag 795 1.1 jruoho uflag_rflag_head() 796 1.1 jruoho { 797 1.1 jruoho atf_set "descr" "Tests the -u and -r flag combination" 798 1.1 jruoho } 799 1.1 jruoho uflag_rflag_body() 800 1.1 jruoho { 801 1.1 jruoho cat >in <<EOF 802 1.1 jruoho a 803 1.1 jruoho aa 804 1.1 jruoho aaa 805 1.1 jruoho aa 806 1.1 jruoho EOF 807 1.1 jruoho 808 1.1 jruoho cat >expout <<EOF 809 1.1 jruoho aaa 810 1.1 jruoho aa 811 1.1 jruoho a 812 1.1 jruoho EOF 813 1.1 jruoho 814 1.1 jruoho atf_check -o file:expout sort -ru in 815 1.1 jruoho } 816 1.1 jruoho 817 1.1 jruoho atf_test_case plus_one 818 1.1 jruoho plus_one_head() 819 1.1 jruoho { 820 1.1 jruoho atf_set "descr" "Tests +- addressing: +1 should become -k2.1" 821 1.1 jruoho } 822 1.1 jruoho plus_one_body() 823 1.1 jruoho { 824 1.1 jruoho cat >in <<EOF 825 1.1 jruoho z b m f 826 1.1 jruoho y c o e 827 1.1 jruoho x a n h 828 1.1 jruoho x a n g 829 1.1 jruoho EOF 830 1.1 jruoho 831 1.1 jruoho cat >expout <<EOF 832 1.1 jruoho x a n g 833 1.1 jruoho x a n h 834 1.1 jruoho z b m f 835 1.1 jruoho y c o e 836 1.1 jruoho EOF 837 1.1 jruoho 838 1.1 jruoho atf_check -o file:expout sort +1 in 839 1.1 jruoho } 840 1.1 jruoho 841 1.1 jruoho atf_test_case plus_one_minus_two 842 1.1 jruoho plus_one_minus_two_head() 843 1.1 jruoho { 844 1.1 jruoho atf_set "descr" "Tests +- addressing: +1 -2 should become -k2.1,2.0" 845 1.1 jruoho } 846 1.1 jruoho plus_one_minus_two_body() 847 1.1 jruoho { 848 1.1 jruoho cat >in <<EOF 849 1.1 jruoho z b m f 850 1.1 jruoho y c o e 851 1.1 jruoho x a n h 852 1.1 jruoho x a n g 853 1.1 jruoho EOF 854 1.1 jruoho 855 1.1 jruoho cat >expout <<EOF 856 1.1 jruoho x a n h 857 1.1 jruoho x a n g 858 1.1 jruoho z b m f 859 1.1 jruoho y c o e 860 1.1 jruoho EOF 861 1.1 jruoho 862 1.1 jruoho atf_check -o file:expout sort +1 -2 in 863 1.1 jruoho } 864 1.1 jruoho 865 1.1 jruoho atf_test_case plus_zero 866 1.1 jruoho plus_zero_head() 867 1.1 jruoho { 868 1.1 jruoho atf_set "descr" "Tests +- addressing: '-- +0' raised a '-k1.1: No" \ 869 1.1 jruoho "such file or directory' error" 870 1.1 jruoho } 871 1.1 jruoho plus_zero_body() 872 1.1 jruoho { 873 1.1 jruoho echo 'good contents' >./+0 874 1.1 jruoho 875 1.1 jruoho atf_check -o file:+0 sort -- +0 876 1.1 jruoho } 877 1.1 jruoho 878 1.1 jruoho atf_test_case plus_nonmonotone 879 1.1 jruoho plus_nonmonotone_head() 880 1.1 jruoho { 881 1.1 jruoho atf_set "descr" "Tests += addressing: apparently nonmonotone field" \ 882 1.1 jruoho "specs" 883 1.1 jruoho } 884 1.1 jruoho plus_nonmonotone_body() 885 1.1 jruoho { 886 1.1 jruoho cat >in <<EOF 887 1.1 jruoho aaaa c 888 1.1 jruoho x a 889 1.1 jruoho 0 b 890 1.1 jruoho EOF 891 1.1 jruoho 892 1.1 jruoho atf_check -o file:in sort +1 -0.3 +1.4 -1.5 in 893 1.1 jruoho } 894 1.1 jruoho 895 1.1 jruoho atf_test_case plus_as_path 896 1.1 jruoho plus_as_path_head() 897 1.1 jruoho { 898 1.1 jruoho atf_set "descr" "Tests +- addressing: 'file +0' raised a '-k1.1: No" \ 899 1.1 jruoho "such file or directory' error" 900 1.1 jruoho } 901 1.1 jruoho plus_as_path_body() 902 1.1 jruoho { 903 1.1 jruoho echo 'good contents' >./+0 904 1.1 jruoho echo 'more contents' >in 905 1.1 jruoho cat ./+0 in >expout 906 1.1 jruoho 907 1.1 jruoho atf_check -o file:expout sort in +0 908 1.1 jruoho } 909 1.1 jruoho 910 1.1 jruoho atf_test_case plus_bad_tempfile 911 1.1 jruoho plus_bad_tempfile_head() 912 1.1 jruoho { 913 1.1 jruoho atf_set "descr" "Tests +- addressing: intermediate wrong behavior" \ 914 1.1 jruoho "that raised a '+0: No such file or directory' error" 915 1.1 jruoho } 916 1.1 jruoho plus_bad_tempfile_body() 917 1.1 jruoho { 918 1.1 jruoho echo 'good contents' >in 919 1.1 jruoho atf_check -o file:in sort -T /tmp +0 in 920 1.1 jruoho } 921 1.1 jruoho 922 1.1 jruoho atf_test_case plus_rflag_invalid 923 1.1 jruoho plus_rflag_invalid_head() 924 1.1 jruoho { 925 1.1 jruoho atf_set "descr" "Tests +- addressing: invalid record delimiter" 926 1.1 jruoho } 927 1.1 jruoho plus_rflag_invalid_body() 928 1.1 jruoho { 929 1.1 jruoho ( 930 1.1 jruoho echo 'z b m f' 931 1.1 jruoho echo 'y c o e' 932 1.1 jruoho echo 'x a n h' 933 1.1 jruoho echo 'x a n g' 934 1.1 jruoho ) | tr '\n' '+' >in 935 1.1 jruoho 936 1.1 jruoho atf_check -o inline:'x a n g+x a n h+z b m f+y c o e+' \ 937 1.1 jruoho sort -R + -k2 in 938 1.1 jruoho } 939 1.1 jruoho 940 1.1 jruoho atf_test_case plus_tflag 941 1.1 jruoho plus_tflag_head() 942 1.1 jruoho { 943 1.1 jruoho atf_set "descr" "Tests +- addressing: using -T caused a 'No such file" \ 944 1.1 jruoho "or directory' error" 945 1.1 jruoho } 946 1.1 jruoho plus_tflag_body() 947 1.1 jruoho { 948 1.1 jruoho mkdir ./+ 949 1.1 jruoho yes | sed 200000q | sort -T + >/dev/null || atf_fail "program failed" 950 1.1 jruoho } 951 1.1 jruoho 952 1.1 jruoho atf_test_case plus_no_end 953 1.1 jruoho plus_no_end_head() 954 1.1 jruoho { 955 1.1 jruoho atf_set "descr" "Tests +- addressing: field without end" 956 1.1 jruoho } 957 1.1 jruoho plus_no_end_body() 958 1.1 jruoho { 959 1.1 jruoho cat >in <<EOF 960 1.1 jruoho a-B 961 1.1 jruoho a+b 962 1.1 jruoho a b 963 1.1 jruoho A+b 964 1.1 jruoho a b 965 1.1 jruoho EOF 966 1.1 jruoho 967 1.1 jruoho cat >out <<EOF 968 1.1 jruoho a b 969 1.1 jruoho a b 970 1.1 jruoho A+b 971 1.1 jruoho a-B 972 1.1 jruoho a+b 973 1.1 jruoho EOF 974 1.1 jruoho 975 1.1 jruoho atf_check -o file:out sort -df +0 +0d in 976 1.1 jruoho } 977 1.1 jruoho 978 1.1 jruoho atf_init_test_cases() 979 1.1 jruoho { 980 1.1 jruoho atf_add_test_case basic 981 1.1 jruoho atf_add_test_case empty_file 982 1.1 jruoho atf_add_test_case end_of_options 983 1.1 jruoho atf_add_test_case missing_newline 984 1.1 jruoho atf_add_test_case null_bytes 985 1.1 jruoho atf_add_test_case long_records 986 1.1 jruoho atf_add_test_case long_file 987 1.1 jruoho atf_add_test_case any_char 988 1.1 jruoho atf_add_test_case bflag 989 1.1 jruoho atf_add_test_case cflag 990 1.1 jruoho atf_add_test_case kflag_one_field 991 1.1 jruoho atf_add_test_case kflag_two_fields 992 1.1 jruoho atf_add_test_case kflag_many_fields 993 1.1 jruoho atf_add_test_case kflag_outofbounds 994 1.1 jruoho atf_add_test_case kflag_nonmonotone 995 1.1 jruoho atf_add_test_case kflag_limits 996 1.1 jruoho atf_add_test_case kflag_alpha 997 1.1 jruoho atf_add_test_case kflag_no_end 998 1.1 jruoho atf_add_test_case mflag 999 1.1 jruoho atf_add_test_case mflag_uflag 1000 1.1 jruoho atf_add_test_case mflag_uflag_first 1001 1.1 jruoho atf_add_test_case nflag 1002 1.1 jruoho atf_add_test_case nflag_rflag 1003 1.1 jruoho atf_add_test_case oflag 1004 1.1 jruoho atf_add_test_case oflag_displaced 1005 1.1 jruoho atf_add_test_case rflag 1006 1.1 jruoho atf_add_test_case sflag 1007 1.1 jruoho atf_add_test_case sflag_many_files 1008 1.1 jruoho atf_add_test_case tflag 1009 1.1 jruoho atf_add_test_case tflag_alphabetic 1010 1.1 jruoho atf_add_test_case tflag_char_pos 1011 1.1 jruoho atf_add_test_case tflag_whitespace 1012 1.1 jruoho atf_add_test_case uflag 1013 1.1 jruoho atf_add_test_case uflag_rflag 1014 1.1 jruoho atf_add_test_case plus_one 1015 1.1 jruoho atf_add_test_case plus_one_minus_two 1016 1.1 jruoho atf_add_test_case plus_zero 1017 1.1 jruoho atf_add_test_case plus_nonmonotone 1018 1.1 jruoho atf_add_test_case plus_as_path 1019 1.1 jruoho atf_add_test_case plus_bad_tempfile 1020 1.1 jruoho atf_add_test_case plus_rflag_invalid 1021 1.1 jruoho atf_add_test_case plus_tflag 1022 1.1 jruoho atf_add_test_case plus_no_end 1023 1.1 jruoho } 1024