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