1272343Sngie# $NetBSD: t_sort.sh,v 1.1 2012/03/17 16:33:15 jruoho Exp $ 2272343Sngie# 3272343Sngie# Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc. 4272343Sngie# All rights reserved. 5272343Sngie# 6272343Sngie# Redistribution and use in source and binary forms, with or without 7272343Sngie# modification, are permitted provided that the following conditions 8272343Sngie# are met: 9272343Sngie# 1. Redistributions of source code must retain the above copyright 10272343Sngie# notice, this list of conditions and the following disclaimer. 11272343Sngie# 2. Redistributions in binary form must reproduce the above copyright 12272343Sngie# notice, this list of conditions and the following disclaimer in the 13272343Sngie# documentation and/or other materials provided with the distribution. 14272343Sngie# 15272343Sngie# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16272343Sngie# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17272343Sngie# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18272343Sngie# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19272343Sngie# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20272343Sngie# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21272343Sngie# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22272343Sngie# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23272343Sngie# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24272343Sngie# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25272343Sngie# POSSIBILITY OF SUCH DAMAGE. 26272343Sngie# 27272343Sngie 28272343Sngieatf_test_case basic 29272343Sngiebasic_head() 30272343Sngie{ 31272343Sngie atf_set "descr" "Basic functionality test" 32272343Sngie} 33272343Sngiebasic_body() 34272343Sngie{ 35272343Sngie cat >in <<EOF 36272343Sngiez b m f 37272343Sngiey c o e 38272343Sngiex a n h 39272343Sngiex a n g 40272343SngieEOF 41272343Sngie 42272343Sngie cat >expout <<EOF 43272343Sngiex a n g 44272343Sngiex a n h 45272343Sngiey c o e 46272343Sngiez b m f 47272343SngieEOF 48272343Sngie 49272343Sngie atf_check -o file:expout sort in 50272343Sngie} 51272343Sngie 52272343Sngieatf_test_case empty_file 53272343Sngieempty_file_head() 54272343Sngie{ 55272343Sngie atf_set "descr" "Tests sorting an empty file" 56272343Sngie} 57272343Sngieempty_file_body() 58272343Sngie{ 59272343Sngie touch empty 60272343Sngie atf_check -o empty sort -S empty 61272343Sngie atf_check sort -S -c empty 62272343Sngie atf_check sort -S -c -u empty 63272343Sngie} 64272343Sngie 65272343Sngieatf_test_case end_of_options 66272343Sngieend_of_options_head() 67272343Sngie{ 68272343Sngie atf_set "descr" "Determination of end of option list" 69272343Sngie} 70272343Sngieend_of_options_body() 71272343Sngie{ 72272343Sngie echo x >-k 73272343Sngie atf_check -o file:-k -x "sort -S -- -k </dev/null" 74272343Sngie atf_check -s not-exit:1 -e ignore -x "sort -S - -c </dev/null" 75272343Sngie} 76272343Sngie 77272343Sngieatf_test_case missing_newline 78272343Sngiemissing_newline_head() 79272343Sngie{ 80272343Sngie atf_set "descr" "Tests with missing new line in input file" 81272343Sngie} 82272343Sngiemissing_newline_body() 83272343Sngie{ 84272343Sngie printf '%s' x >in 85272343Sngie atf_check -o inline:'x\n' sort in 86272343Sngie} 87272343Sngie 88272343Sngieatf_test_case null_bytes 89272343Sngienull_bytes_head() 90272343Sngie{ 91272343Sngie atf_set "descr" "Tests the behavior of null bytes" 92272343Sngie} 93272343Sngienull_bytes_body() 94272343Sngie{ 95272343Sngie printf '\0b\n\0a\n' >in 96272343Sngie atf_check -o inline:'\0a\n\0b\n' sort -S in 97272343Sngie} 98272343Sngie 99272343Sngieatf_test_case long_records 100272343Sngielong_records_head() 101272343Sngie{ 102272343Sngie atf_set "descr" "Tests long lines and keys" 103272343Sngie} 104272343Sngielong_records_body() 105272343Sngie{ 106272343Sngie awk 'BEGIN { x="x" 107272343Sngie for(i=1; i<=12; i++) x = x x 108272343Sngie for(i=15; i<=25; i++) print x i 109272343Sngie}' >in 110272343Sngie 111272343Sngie awk 'BEGIN { x="x" 112272343Sngie for(i=1; i<=12; i++) x = x x 113272343Sngie for(i=25; i>=15; i--) print x i 114272343Sngie}' >out 115272343Sngie 116272343Sngie atf_check -o file:out sort -r in 117272343Sngie atf_check -o file:out sort -k 1,1r -k 1 in 118272343Sngie} 119272343Sngie 120272343Sngieatf_test_case long_file 121272343Sngielong_file_head() 122272343Sngie{ 123272343Sngie atf_set "descr" "Tests with a long file to try to force intermediate" \ 124272343Sngie "files" 125272343Sngie} 126272343Sngielong_file_body() 127272343Sngie{ 128272343Sngie awk 'BEGIN { for(i=0; i<20000; i++) print rand() }' >in 129272343Sngie sort -S -r in | awk '$0 "x" != x { print ; x = $0 "x" }' >out 130272343Sngie atf_check -o file:out sort -u -r in 131272343Sngie} 132272343Sngie 133272343Sngieatf_test_case any_char 134272343Sngieany_char_head() 135272343Sngie{ 136272343Sngie atf_set "descr" "Tests with files containing non-printable/extended" \ 137272343Sngie "characters" 138272343Sngie} 139272343Sngieany_char_body() 140272343Sngie{ 141272343Sngie atf_check -o file:$(atf_get_srcdir)/d_any_char_dflag_out.txt \ 142272343Sngie sort -d -k 2 $(atf_get_srcdir)/d_any_char_in.txt 143272343Sngie 144272343Sngie atf_check -o file:$(atf_get_srcdir)/d_any_char_fflag_out.txt \ 145272343Sngie sort -f -k 2 $(atf_get_srcdir)/d_any_char_in.txt 146272343Sngie 147272343Sngie atf_check -o file:$(atf_get_srcdir)/d_any_char_iflag_out.txt \ 148272343Sngie sort -i -k 2 $(atf_get_srcdir)/d_any_char_in.txt 149272343Sngie} 150272343Sngie 151272343Sngieatf_test_case bflag 152272343Sngiebflag_head() 153272343Sngie{ 154272343Sngie atf_set "descr" "Tests the -b flag" 155272343Sngie} 156272343Sngiebflag_body() 157272343Sngie{ 158272343Sngie cat >in <<EOF 159272343Sngie b 160272343Sngie a 161272343SngieEOF 162272343Sngie 163272343Sngie atf_check -o file:in sort -b in 164272343Sngie atf_check -o file:in -x "sort -b <in" 165272343Sngie atf_check -s exit:1 -o ignore -e ignore -x "sort in | sort -c -r" 166272343Sngie} 167272343Sngie 168272343Sngieatf_test_case cflag 169272343Sngiecflag_head() 170272343Sngie{ 171272343Sngie atf_set "descr" "Tests the -c flag" 172272343Sngie} 173272343Sngiecflag_body() 174272343Sngie{ 175272343Sngie cat >in <<EOF 176272343Sngieb 177272343Sngiea 178272343SngieEOF 179272343Sngie 180272343Sngie atf_check -s exit:1 -e ignore sort -S -c in 181272343Sngie} 182272343Sngie 183272343Sngieatf_test_case kflag_one_field 184272343Sngiekflag_one_field_head() 185272343Sngie{ 186272343Sngie atf_set "descr" "Tests the -k flag with one field" 187272343Sngie} 188272343Sngiekflag_one_field_body() 189272343Sngie{ 190272343Sngie cat >in <<EOF 191272343Sngiez b m f 192272343Sngiey c o e 193272343Sngiex a n h 194272343Sngiex a n g 195272343SngieEOF 196272343Sngie 197272343Sngie cat >expout <<EOF 198272343Sngiex a n g 199272343Sngiex a n h 200272343Sngiez b m f 201272343Sngiey c o e 202272343SngieEOF 203272343Sngie 204272343Sngie atf_check -o file:expout sort -k2.1 in 205272343Sngie} 206272343Sngie 207272343Sngieatf_test_case kflag_two_fields 208272343Sngiekflag_two_fields_head() 209272343Sngie{ 210272343Sngie atf_set "descr" "Tests the -k flag with two fields" 211272343Sngie} 212272343Sngiekflag_two_fields_body() 213272343Sngie{ 214272343Sngie cat >in <<EOF 215272343Sngiez b m f 216272343Sngiey c o e 217272343Sngiex a n h 218272343Sngiex a n g 219272343SngieEOF 220272343Sngie 221272343Sngie cat >expout <<EOF 222272343Sngiex a n h 223272343Sngiex a n g 224272343Sngiez b m f 225272343Sngiey c o e 226272343SngieEOF 227272343Sngie atf_check -o file:expout sort -k2.1,2.0 in 228272343Sngie} 229272343Sngie 230272343Sngieatf_test_case kflag_many_fields 231272343Sngiekflag_many_fields_head() 232272343Sngie{ 233272343Sngie atf_set "descr" "Tests the -k flag with many fields" 234272343Sngie} 235272343Sngiekflag_many_fields_body() 236272343Sngie{ 237272343Sngie cat >in <<EOF 238272343Sngie0:2:3:4:5:6:7:8:9 239272343Sngie1:1:3:4:5:6:7:8:9 240272343Sngie1:2:2:4:5:6:7:8:9 241272343Sngie1:2:3:3:5:6:7:8:9 242272343Sngie1:2:3:4:4:6:7:8:9 243272343Sngie1:2:3:4:5:5:7:8:9 244272343Sngie1:2:3:4:5:6:6:8:9 245272343Sngie1:2:3:4:5:6:7:7:9 246272343Sngie1:2:3:4:5:6:7:8:8 247272343SngieEOF 248272343Sngie 249272343Sngie cat >out <<EOF 250272343Sngie1:2:3:4:5:6:7:8:8 251272343Sngie1:2:3:4:5:6:7:7:9 252272343Sngie1:2:3:4:5:6:6:8:9 253272343Sngie1:2:3:4:5:5:7:8:9 254272343Sngie1:2:3:4:4:6:7:8:9 255272343Sngie1:2:3:3:5:6:7:8:9 256272343Sngie1:2:2:4:5:6:7:8:9 257272343Sngie1:1:3:4:5:6:7:8:9 258272343Sngie0:2:3:4:5:6:7:8:9 259272343SngieEOF 260272343Sngie 261272343Sngie atf_check -o file:out sort -t: -k9 -k8 -k7 -k6 -k5 -k4 -k3 \ 262272343Sngie -k2 -k1 in 263272343Sngie} 264272343Sngie 265272343Sngieatf_test_case kflag_outofbounds 266272343Sngiekflag_outofbounds_head() 267272343Sngie{ 268272343Sngie atf_set "descr" "Tests the -k flag with out of bounds fields" 269272343Sngie} 270272343Sngiekflag_outofbounds_body() 271272343Sngie{ 272272343Sngie cat >in <<EOF 273272343Sngie0 5 274272343Sngie1 4 275272343Sngie2 3 276272343Sngie3 2 277272343Sngie4 1 278272343Sngie5 0 279272343SngieEOF 280272343Sngie 281272343Sngie atf_check -o file:in sort -k2.2,2.1 -k2.3,2.4 in 282272343Sngie} 283272343Sngie 284272343Sngieatf_test_case kflag_nonmonotone 285272343Sngiekflag_nonmonotone_head() 286272343Sngie{ 287272343Sngie atf_set "descr" "Tests the -k flag with apparently nonmonotone" \ 288272343Sngie "field specs" 289272343Sngie} 290272343Sngiekflag_nonmonotone_body() 291272343Sngie{ 292272343Sngie cat >in <<EOF 293272343Sngieaaaa c 294272343Sngiex a 295272343Sngie0 b 296272343SngieEOF 297272343Sngie 298272343Sngie atf_check -o file:in sort -k2,1.3 -k2.5,2.5 in 299272343Sngie} 300272343Sngie 301272343Sngieatf_test_case kflag_limits 302272343Sngiekflag_limits_head() 303272343Sngie{ 304272343Sngie atf_set "descr" "Tests the -k flag field limits" 305272343Sngie} 306272343Sngiekflag_limits_body() 307272343Sngie{ 308272343Sngie cat >in <<EOF 309272343Sngiea 2 310272343Sngiea 1 311272343Sngieb 2 312272343Sngieb 1 313272343SngieEOF 314272343Sngie 315272343Sngie cat >out <<EOF 316272343Sngieb 2 317272343Sngieb 1 318272343Sngiea 2 319272343Sngiea 1 320272343SngieEOF 321272343Sngie 322272343Sngie atf_check -o file:out sort -r -k1,1 -k2n in 323272343Sngie} 324272343Sngie 325272343Sngieatf_test_case kflag_alpha 326272343Sngiekflag_alpha_head() 327272343Sngie{ 328272343Sngie atf_set "descr" "Tests the -k flag with various alpha fields" 329272343Sngie} 330272343Sngiekflag_alpha_body() 331272343Sngie{ 332272343Sngie sort >in <<EOF 333272343Sngie01:04:19:01:16:01:21:01 a 334272343Sngie02:03:13:15:13:19:15:02 a 335272343Sngie03:02:07:09:07:13:09:03 a 336272343Sngie04:01:01:03:01:07:03:04 a 337272343Sngie05:08:20:16:17:02:20:05 aa 338272343Sngie06:07:14:18:14:20:14:06 aa 339272343Sngie07:06:08:10:08:14:08:07 aa 340272343Sngie08:05:02:04:02:08:02:08 aa 341272343Sngie09:16:22:02:22:04:24:13 b 342272343Sngie10:15:16:20:19:22:18:14 b 343272343Sngie11:14:10:12:10:16:12:15 b 344272343Sngie12:13:04:06:04:10:06:16 b 345272343Sngie13:24:24:22:24:06:22:21 bb 346272343Sngie14:23:18:24:21:24:16:22 bb 347272343Sngie15:22:12:14:12:18:10:23 bb 348272343Sngie16:21:06:08:06:12:04:24 bb 349272343Sngie17:12:21:21:18:03:19:09 ab 350272343Sngie18:11:15:19:15:21:13:10 ab 351272343Sngie19:10:09:11:09:15:07:11 ab 352272343Sngie20:09:03:05:03:09:01:12 ab 353272343Sngie21:20:23:17:23:05:23:17 ba 354272343Sngie22:19:17:23:20:23:17:18 ba 355272343Sngie23:18:11:13:11:17:11:19 ba 356272343Sngie24:17:05:07:05:11:05:20 ba 357272343SngieEOF 358272343Sngie 359272343Sngie atf_check -x "sort -S -k2b -k2 in >xx" 360272343Sngie atf_check -e ignore sort -c -t: -k2n xx 361272343Sngie 362272343Sngie atf_check -x "sort -S -k2,2.1b -k2 in >xx" 363272343Sngie atf_check -e ignore sort -c -t: -k3n xx 364272343Sngie 365272343Sngie atf_check -x "sort -S -k2.3 -k2 in >xx" 366272343Sngie atf_check -e ignore sort -c -t: -k4n xx 367272343Sngie 368272343Sngie atf_check -x "sort -S -k2b,2.3 -k2 in >xx" 369272343Sngie atf_check -e ignore sort -c -t: -k5n xx 370272343Sngie 371272343Sngie atf_check -x "sort -S -k2.3,2.1b -k2 in >xx" 372272343Sngie atf_check -e ignore sort -c -t: -k6n xx 373272343Sngie 374272343Sngie atf_check -x "sort -S -k2,2.1b -k2r in >xx" 375272343Sngie atf_check -e ignore sort -c -t: -k7n xx 376272343Sngie 377272343Sngie atf_check -x "sort -S -b -k2,2 -k2 in >xx" 378272343Sngie atf_check -e ignore sort -c -t: -k8n xx 379272343Sngie 380272343Sngie # XXX This test is broken. The standard is not clear on the behavior. 381272343Sngie #atf_check -x "sort -S -b -k2,2b -k2 in >xx" 382272343Sngie #atf_check -e ignore sort -c -t: -k3n xx 383272343Sngie} 384272343Sngie 385272343Sngieatf_test_case kflag_no_end 386272343Sngiekflag_no_end_head() 387272343Sngie{ 388272343Sngie atf_set "descr" "Tests the -k flag with a field without end" 389272343Sngie} 390272343Sngiekflag_no_end_body() 391272343Sngie{ 392272343Sngie cat >in <<EOF 393272343Sngiea-B 394272343Sngiea+b 395272343Sngiea b 396272343SngieA+b 397272343Sngiea b 398272343SngieEOF 399272343Sngie 400272343Sngie cat >out <<EOF 401272343Sngiea b 402272343Sngiea b 403272343SngieA+b 404272343Sngiea-B 405272343Sngiea+b 406272343SngieEOF 407272343Sngie 408272343Sngie atf_check -o file:out sort -df -k 1 -k 1d <in 409272343Sngie} 410272343Sngie 411272343Sngieatf_test_case mflag 412272343Sngiemflag_head() 413272343Sngie{ 414272343Sngie atf_set "descr" "Tests the -m flag" 415272343Sngie} 416272343Sngiemflag_body() 417272343Sngie{ 418272343Sngie cat >in1 <<EOF 419272343Sngiea 420272343Sngieab 421272343Sngieab 422272343Sngiebc 423272343Sngieca 424272343SngieEOF 425272343Sngie cat >in2 <<EOF 426272343SngieZ 427272343Sngiea 428272343Sngieaa 429272343Sngieac 430272343Sngiec 431272343SngieEOF 432272343Sngie cat >out <<EOF 433272343SngieZ 434272343Sngiea 435272343Sngiea 436272343Sngieaa 437272343Sngieab 438272343Sngieab 439272343Sngieac 440272343Sngiebc 441272343Sngiec 442272343Sngieca 443272343SngieEOF 444272343Sngie 445272343Sngie atf_check -o file:out sort -S -m in1 in2 446272343Sngie} 447272343Sngie 448272343Sngieatf_test_case mflag_uflag 449272343Sngiemflag_uflag_head() 450272343Sngie{ 451272343Sngie atf_set "descr" "Tests the -m flag together with -u" 452272343Sngie} 453272343Sngiemflag_uflag_body() 454272343Sngie{ 455272343Sngie cat >in <<EOF 456272343Sngiea 457272343Sngieb 458272343Sngiec 459272343Sngied 460272343SngieEOF 461272343Sngie 462272343Sngie atf_check -o file:in sort -m -u in 463272343Sngie} 464272343Sngie 465272343Sngieatf_test_case mflag_uflag_first 466272343Sngiemflag_uflag_first_head() 467272343Sngie{ 468272343Sngie atf_set "descr" "Tests that the -m flag together with -u picks the" \ 469272343Sngie "first among equal" 470272343Sngie} 471272343Sngiemflag_uflag_first_body() 472272343Sngie{ 473272343Sngie cat >in <<EOF 474272343Sngie3B 475272343Sngie3b 476272343Sngie3B2 477272343Sngie~3B2 478272343Sngie4.1 479272343Sngie41 480272343Sngie5 481272343Sngie5. 482272343SngieEOF 483272343Sngie 484272343Sngie cat >out <<EOF 485272343Sngie3B 486272343Sngie3B2 487272343Sngie4.1 488272343Sngie5 489272343SngieEOF 490272343Sngie 491272343Sngie atf_check -o file:out sort -mudf in 492272343Sngie atf_check -o file:out sort -mudf -k1 in 493272343Sngie} 494272343Sngie 495272343Sngieatf_test_case nflag 496272343Sngienflag_head() 497272343Sngie{ 498272343Sngie atf_set "descr" "Tests the -n flag" 499272343Sngie} 500272343Sngienflag_body() 501272343Sngie{ 502272343Sngie cat >in <<EOF 503272343Sngie-99.0 504272343Sngie-99.1 505272343Sngie-.0002 506272343Sngie-10 507272343Sngie2 508272343Sngie0010.000000000000000000000000000000000001 509272343Sngie10 510272343Sngie3x 511272343Sngiex 512272343SngieEOF 513272343Sngie 514272343Sngie cat >expout <<EOF 515272343Sngie-99.1 516272343Sngie-99.0 517272343Sngie-10 518272343Sngie-.0002 519272343Sngiex 520272343Sngie2 521272343Sngie3x 522272343Sngie10 523272343Sngie0010.000000000000000000000000000000000001 524272343SngieEOF 525272343Sngie 526272343Sngie atf_check -o file:expout sort -n in 527272343Sngie} 528272343Sngie 529272343Sngieatf_test_case nflag_rflag 530272343Sngienflag_rflag_head() 531272343Sngie{ 532272343Sngie atf_set "descr" "Tests the -n and -r flag combination" 533272343Sngie} 534272343Sngienflag_rflag_body() 535272343Sngie{ 536272343Sngie cat >in <<EOF 537272343Sngie1 538272343Sngie123 539272343Sngie2 540272343SngieEOF 541272343Sngie 542272343Sngie cat >expout <<EOF 543272343Sngie123 544272343Sngie2 545272343Sngie1 546272343SngieEOF 547272343Sngie 548272343Sngie atf_check -o file:expout sort -rn in 549272343Sngie} 550272343Sngie 551272343Sngieatf_test_case oflag 552272343Sngieoflag_head() 553272343Sngie{ 554272343Sngie atf_set "descr" "Tests the -o flag" 555272343Sngie} 556272343Sngieoflag_body() 557272343Sngie{ 558272343Sngie cat >in <<EOF 559272343Sngie1 560272343Sngie1 561272343Sngie2 562272343Sngie2 563272343Sngie3 564272343Sngie3 565272343Sngie4 566272343Sngie4 567272343SngieEOF 568272343Sngie 569272343Sngie atf_check sort -u -o in in 570272343Sngie 571272343Sngie cat >expout <<EOF 572272343Sngie1 573272343Sngie2 574272343Sngie3 575272343Sngie4 576272343SngieEOF 577272343Sngie 578272343Sngie atf_check -o file:expout cat in 579272343Sngie} 580272343Sngie 581272343Sngieatf_test_case oflag_displaced 582272343Sngieoflag_displaced_head() 583272343Sngie{ 584272343Sngie atf_set "descr" "Tests the -o flag after the file names" 585272343Sngie} 586272343Sngieoflag_displaced_body() 587272343Sngie{ 588272343Sngie atf_check sort -S /dev/null -o out 589272343Sngie test -f out || atf_fail "File not created" 590272343Sngie} 591272343Sngie 592272343Sngieatf_test_case rflag 593272343Sngierflag_head() 594272343Sngie{ 595272343Sngie atf_set "descr" "Tests the -r flag" 596272343Sngie} 597272343Sngierflag_body() 598272343Sngie{ 599272343Sngie cat >in <<EOF 600272343Sngiez b m f 601272343Sngiey c o e 602272343Sngiex a n h 603272343Sngiex a n g 604272343SngieEOF 605272343Sngie 606272343Sngie cat >expout <<EOF 607272343Sngiez b m f 608272343Sngiey c o e 609272343Sngiex a n h 610272343Sngiex a n g 611272343SngieEOF 612272343Sngie 613272343Sngie atf_check -o file:expout sort -r in 614272343Sngie} 615272343Sngie 616272343Sngieatf_test_case sflag 617272343Sngiesflag_head() 618272343Sngie{ 619272343Sngie atf_set "descr" "Tests the -s flag" 620272343Sngie} 621272343Sngiesflag_body() 622272343Sngie{ 623272343Sngie cat >in <<EOF 624272343Sngiea 2 625272343Sngieb 1 626272343Sngiec 2 627272343Sngiea 1 628272343Sngieb 2 629272343Sngiec 1 630272343SngieEOF 631272343Sngie 632272343Sngie cat >out <<EOF 633272343Sngiea 2 634272343Sngiea 1 635272343Sngieb 1 636272343Sngieb 2 637272343Sngiec 2 638272343Sngiec 1 639272343SngieEOF 640272343Sngie 641272343Sngie atf_check -o file:out sort -s -k1,1 in 642272343Sngie} 643272343Sngie 644272343Sngieatf_test_case sflag_many_files 645272343Sngiesflag_many_files_head() 646272343Sngie{ 647272343Sngie atf_set "descr" "Tests the -s flag with multiple files" 648272343Sngie} 649272343Sngiesflag_many_files_body() 650272343Sngie{ 651272343Sngie cat >in1 <<EOF 652272343Sngiec 2 653272343Sngiea 2 654272343SngieEOF 655272343Sngie 656272343Sngie cat >in2 <<EOF 657272343Sngiec 1 658272343Sngieb 1 659272343Sngiea 1 660272343SngieEOF 661272343Sngie 662272343Sngie cat >out <<EOF 663272343Sngiec 2 664272343Sngieb 1 665272343Sngiea 2 666272343SngieEOF 667272343Sngie 668272343Sngie atf_check -o file:out sort -smru -k1,1 in1 in1 in2 in2 669272343Sngie} 670272343Sngie 671272343Sngieatf_test_case tflag 672272343Sngietflag_head() 673272343Sngie{ 674272343Sngie atf_set "descr" "Tests the -t flag" 675272343Sngie} 676272343Sngietflag_body() 677272343Sngie{ 678272343Sngie cat >in <<EOF 679272343Sngiea: 680272343Sngiea! 681272343SngieEOF 682272343Sngie 683272343Sngie atf_check -o file:in sort -t : -r +0 in 684272343Sngie atf_check -o file:in sort -t : +0 -1 in 685272343Sngie atf_check -o file:in sort -t : -r -k 1 in 686272343Sngie atf_check -o file:in sort -t : -k 1,1 in 687272343Sngie} 688272343Sngie 689272343Sngieatf_test_case tflag_alphabetic 690272343Sngietflag_alphabetic_head() 691272343Sngie{ 692272343Sngie atf_set "descr" "Tests the -t flag with a character as the delimiter" 693272343Sngie} 694272343Sngietflag_alphabetic_body() 695272343Sngie{ 696272343Sngie cat >in <<EOF 697272343SngiezXa 698272343SngieyXa 699272343SngiezXb 700272343SngieEOF 701272343Sngie 702272343Sngie atf_check -o file:in sort -tX -k2 -k1r,1 in 703272343Sngie} 704272343Sngie 705272343Sngieatf_test_case tflag_char_pos 706272343Sngietflag_char_pos_head() 707272343Sngie{ 708272343Sngie atf_set "descr" "Tests the -t flag with character positions in fields" 709272343Sngie} 710272343Sngietflag_char_pos_body() 711272343Sngie{ 712272343Sngie cat >in <<EOF 713272343Sngie: ab 714272343Sngie:bac 715272343SngieEOF 716272343Sngie 717272343Sngie cat >out <<EOF 718272343Sngie:bac 719272343Sngie: ab 720272343SngieEOF 721272343Sngie 722272343Sngie atf_check -o file:out sort -b -t: +1.1 in 723272343Sngie atf_check -o file:out sort -t: +1.1r in 724272343Sngie atf_check -o file:out sort -b -t: -k 2.2 in 725272343Sngie atf_check -o file:out sort -t: -k 2.2r in 726272343Sngie} 727272343Sngie 728272343Sngieatf_test_case tflag_whitespace 729272343Sngietflag_whitespace_head() 730272343Sngie{ 731272343Sngie atf_set "descr" "Tests the -t flag with spaces and tabs as the" \ 732272343Sngie "delimiter" 733272343Sngie} 734272343Sngietflag_whitespace_body() 735272343Sngie{ 736272343Sngie cat >in <<EOF 737272343Sngie b c 738272343Sngie b c 739272343Sngie b c 740272343SngieEOF 741272343Sngie 742272343Sngie atf_check -o file:in sort -t ' ' -k2,2 in 743272343Sngie atf_check -o file:in sort -t ' ' -k2.1,2.0 in 744272343Sngie 745272343Sngie cat >out <<EOF 746272343Sngie b c 747272343Sngie b c 748272343Sngie b c 749272343SngieEOF 750272343Sngie 751272343Sngie atf_check -o file:out sort -t ' ' -k2,2 in 752272343Sngie atf_check -o file:out sort -t ' ' -k2.1,2.0 in 753272343Sngie 754272343Sngie cat >out <<EOF 755272343Sngie b c 756272343Sngie b c 757272343Sngie b c 758272343SngieEOF 759272343Sngie 760272343Sngie atf_check -o file:out sort -S -k2 in 761272343Sngie 762272343Sngie cat >out <<EOF 763272343Sngie b c 764272343Sngie b c 765272343Sngie b c 766272343SngieEOF 767272343Sngie 768272343Sngie atf_check -o file:out sort -S -k2b in 769272343Sngie} 770272343Sngie 771272343Sngieatf_test_case uflag 772272343Sngieuflag_head() 773272343Sngie{ 774272343Sngie atf_set "descr" "Tests the -u flag" 775272343Sngie} 776272343Sngieuflag_body() 777272343Sngie{ 778272343Sngie cat >in <<EOF 779272343Sngiea 780272343Sngieaa 781272343Sngieaaa 782272343Sngieaa 783272343SngieEOF 784272343Sngie 785272343Sngie cat >expout <<EOF 786272343Sngiea 787272343Sngieaa 788272343Sngieaaa 789272343SngieEOF 790272343Sngie 791272343Sngie atf_check -o file:expout sort -u in 792272343Sngie} 793272343Sngie 794272343Sngieatf_test_case uflag_rflag 795272343Sngieuflag_rflag_head() 796272343Sngie{ 797272343Sngie atf_set "descr" "Tests the -u and -r flag combination" 798272343Sngie} 799272343Sngieuflag_rflag_body() 800272343Sngie{ 801272343Sngie cat >in <<EOF 802272343Sngiea 803272343Sngieaa 804272343Sngieaaa 805272343Sngieaa 806272343SngieEOF 807272343Sngie 808272343Sngie cat >expout <<EOF 809272343Sngieaaa 810272343Sngieaa 811272343Sngiea 812272343SngieEOF 813272343Sngie 814272343Sngie atf_check -o file:expout sort -ru in 815272343Sngie} 816272343Sngie 817272343Sngieatf_test_case plus_one 818272343Sngieplus_one_head() 819272343Sngie{ 820272343Sngie atf_set "descr" "Tests +- addressing: +1 should become -k2.1" 821272343Sngie} 822272343Sngieplus_one_body() 823272343Sngie{ 824272343Sngie cat >in <<EOF 825272343Sngiez b m f 826272343Sngiey c o e 827272343Sngiex a n h 828272343Sngiex a n g 829272343SngieEOF 830272343Sngie 831272343Sngie cat >expout <<EOF 832272343Sngiex a n g 833272343Sngiex a n h 834272343Sngiez b m f 835272343Sngiey c o e 836272343SngieEOF 837272343Sngie 838272343Sngie atf_check -o file:expout sort +1 in 839272343Sngie} 840272343Sngie 841272343Sngieatf_test_case plus_one_minus_two 842272343Sngieplus_one_minus_two_head() 843272343Sngie{ 844272343Sngie atf_set "descr" "Tests +- addressing: +1 -2 should become -k2.1,2.0" 845272343Sngie} 846272343Sngieplus_one_minus_two_body() 847272343Sngie{ 848272343Sngie cat >in <<EOF 849272343Sngiez b m f 850272343Sngiey c o e 851272343Sngiex a n h 852272343Sngiex a n g 853272343SngieEOF 854272343Sngie 855272343Sngie cat >expout <<EOF 856272343Sngiex a n h 857272343Sngiex a n g 858272343Sngiez b m f 859272343Sngiey c o e 860272343SngieEOF 861272343Sngie 862272343Sngie atf_check -o file:expout sort +1 -2 in 863272343Sngie} 864272343Sngie 865272343Sngieatf_test_case plus_zero 866272343Sngieplus_zero_head() 867272343Sngie{ 868272343Sngie atf_set "descr" "Tests +- addressing: '-- +0' raised a '-k1.1: No" \ 869272343Sngie "such file or directory' error" 870272343Sngie} 871272343Sngieplus_zero_body() 872272343Sngie{ 873272343Sngie echo 'good contents' >./+0 874272343Sngie 875272343Sngie atf_check -o file:+0 sort -- +0 876272343Sngie} 877272343Sngie 878272343Sngieatf_test_case plus_nonmonotone 879272343Sngieplus_nonmonotone_head() 880272343Sngie{ 881272343Sngie atf_set "descr" "Tests += addressing: apparently nonmonotone field" \ 882272343Sngie "specs" 883272343Sngie} 884272343Sngieplus_nonmonotone_body() 885272343Sngie{ 886272343Sngie cat >in <<EOF 887272343Sngieaaaa c 888272343Sngiex a 889272343Sngie0 b 890272343SngieEOF 891272343Sngie 892272343Sngie atf_check -o file:in sort +1 -0.3 +1.4 -1.5 in 893272343Sngie} 894272343Sngie 895272343Sngieatf_test_case plus_as_path 896272343Sngieplus_as_path_head() 897272343Sngie{ 898272343Sngie atf_set "descr" "Tests +- addressing: 'file +0' raised a '-k1.1: No" \ 899272343Sngie "such file or directory' error" 900272343Sngie} 901272343Sngieplus_as_path_body() 902272343Sngie{ 903272343Sngie echo 'good contents' >./+0 904272343Sngie echo 'more contents' >in 905272343Sngie cat ./+0 in >expout 906272343Sngie 907272343Sngie atf_check -o file:expout sort in +0 908272343Sngie} 909272343Sngie 910272343Sngieatf_test_case plus_bad_tempfile 911272343Sngieplus_bad_tempfile_head() 912272343Sngie{ 913272343Sngie atf_set "descr" "Tests +- addressing: intermediate wrong behavior" \ 914272343Sngie "that raised a '+0: No such file or directory' error" 915272343Sngie} 916272343Sngieplus_bad_tempfile_body() 917272343Sngie{ 918272343Sngie echo 'good contents' >in 919272343Sngie atf_check -o file:in sort -T /tmp +0 in 920272343Sngie} 921272343Sngie 922272343Sngieatf_test_case plus_rflag_invalid 923272343Sngieplus_rflag_invalid_head() 924272343Sngie{ 925272343Sngie atf_set "descr" "Tests +- addressing: invalid record delimiter" 926272343Sngie} 927272343Sngieplus_rflag_invalid_body() 928272343Sngie{ 929272343Sngie ( 930272343Sngie echo 'z b m f' 931272343Sngie echo 'y c o e' 932272343Sngie echo 'x a n h' 933272343Sngie echo 'x a n g' 934272343Sngie ) | tr '\n' '+' >in 935272343Sngie 936272343Sngie atf_check -o inline:'x a n g+x a n h+z b m f+y c o e+' \ 937272343Sngie sort -R + -k2 in 938272343Sngie} 939272343Sngie 940272343Sngieatf_test_case plus_tflag 941272343Sngieplus_tflag_head() 942272343Sngie{ 943272343Sngie atf_set "descr" "Tests +- addressing: using -T caused a 'No such file" \ 944272343Sngie "or directory' error" 945272343Sngie} 946272343Sngieplus_tflag_body() 947272343Sngie{ 948272343Sngie mkdir ./+ 949272343Sngie yes | sed 200000q | sort -T + >/dev/null || atf_fail "program failed" 950272343Sngie} 951272343Sngie 952272343Sngieatf_test_case plus_no_end 953272343Sngieplus_no_end_head() 954272343Sngie{ 955272343Sngie atf_set "descr" "Tests +- addressing: field without end" 956272343Sngie} 957272343Sngieplus_no_end_body() 958272343Sngie{ 959272343Sngie cat >in <<EOF 960272343Sngiea-B 961272343Sngiea+b 962272343Sngiea b 963272343SngieA+b 964272343Sngiea b 965272343SngieEOF 966272343Sngie 967272343Sngie cat >out <<EOF 968272343Sngiea b 969272343Sngiea b 970272343SngieA+b 971272343Sngiea-B 972272343Sngiea+b 973272343SngieEOF 974272343Sngie 975272343Sngie atf_check -o file:out sort -df +0 +0d in 976272343Sngie} 977272343Sngie 978272343Sngieatf_init_test_cases() 979272343Sngie{ 980272343Sngie atf_add_test_case basic 981272343Sngie atf_add_test_case empty_file 982272343Sngie atf_add_test_case end_of_options 983272343Sngie atf_add_test_case missing_newline 984272343Sngie atf_add_test_case null_bytes 985272343Sngie atf_add_test_case long_records 986272343Sngie atf_add_test_case long_file 987272343Sngie atf_add_test_case any_char 988272343Sngie atf_add_test_case bflag 989272343Sngie atf_add_test_case cflag 990272343Sngie atf_add_test_case kflag_one_field 991272343Sngie atf_add_test_case kflag_two_fields 992272343Sngie atf_add_test_case kflag_many_fields 993272343Sngie atf_add_test_case kflag_outofbounds 994272343Sngie atf_add_test_case kflag_nonmonotone 995272343Sngie atf_add_test_case kflag_limits 996272343Sngie atf_add_test_case kflag_alpha 997272343Sngie atf_add_test_case kflag_no_end 998272343Sngie atf_add_test_case mflag 999272343Sngie atf_add_test_case mflag_uflag 1000272343Sngie atf_add_test_case mflag_uflag_first 1001272343Sngie atf_add_test_case nflag 1002272343Sngie atf_add_test_case nflag_rflag 1003272343Sngie atf_add_test_case oflag 1004272343Sngie atf_add_test_case oflag_displaced 1005272343Sngie atf_add_test_case rflag 1006272343Sngie atf_add_test_case sflag 1007272343Sngie atf_add_test_case sflag_many_files 1008272343Sngie atf_add_test_case tflag 1009272343Sngie atf_add_test_case tflag_alphabetic 1010272343Sngie atf_add_test_case tflag_char_pos 1011272343Sngie atf_add_test_case tflag_whitespace 1012272343Sngie atf_add_test_case uflag 1013272343Sngie atf_add_test_case uflag_rflag 1014272343Sngie atf_add_test_case plus_one 1015272343Sngie atf_add_test_case plus_one_minus_two 1016272343Sngie atf_add_test_case plus_zero 1017272343Sngie atf_add_test_case plus_nonmonotone 1018272343Sngie atf_add_test_case plus_as_path 1019272343Sngie atf_add_test_case plus_bad_tempfile 1020272343Sngie atf_add_test_case plus_rflag_invalid 1021272343Sngie atf_add_test_case plus_tflag 1022272343Sngie atf_add_test_case plus_no_end 1023272343Sngie} 1024