xref: /freebsd-src/contrib/netbsd-tests/usr.bin/sort/t_sort.sh (revision f9e565abca9b5880fe3203ba67c90eaf3e906e95)
157718be8SEnji Cooper# $NetBSD: t_sort.sh,v 1.1 2012/03/17 16:33:15 jruoho Exp $
257718be8SEnji Cooper#
357718be8SEnji Cooper# Copyright (c) 2008, 2009, 2010 The NetBSD Foundation, Inc.
457718be8SEnji Cooper# All rights reserved.
557718be8SEnji Cooper#
657718be8SEnji Cooper# Redistribution and use in source and binary forms, with or without
757718be8SEnji Cooper# modification, are permitted provided that the following conditions
857718be8SEnji Cooper# are met:
957718be8SEnji Cooper# 1. Redistributions of source code must retain the above copyright
1057718be8SEnji Cooper#    notice, this list of conditions and the following disclaimer.
1157718be8SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright
1257718be8SEnji Cooper#    notice, this list of conditions and the following disclaimer in the
1357718be8SEnji Cooper#    documentation and/or other materials provided with the distribution.
1457718be8SEnji Cooper#
1557718be8SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
1657718be8SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
1757718be8SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1857718be8SEnji Cooper# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
1957718be8SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2057718be8SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2157718be8SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2257718be8SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2357718be8SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2457718be8SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2557718be8SEnji Cooper# POSSIBILITY OF SUCH DAMAGE.
2657718be8SEnji Cooper#
2757718be8SEnji Cooper
28*f9e565abSCyril Zhang# The -S flag in NetBSD sort enables non-stable sorting order. This flag
29*f9e565abSCyril Zhang# doesn't exist in FreeBSD sort, and instead indicates buffer size, so all
30*f9e565abSCyril Zhang# instances of this flag should be removed.
31*f9e565abSCyril Zhang#
32*f9e565abSCyril Zhang# For tests that expect exact output, but where some lines may compare
33*f9e565abSCyril Zhang# the same, the flag -s should be added to enforce an expected sorting order.
34*f9e565abSCyril Zhang
3557718be8SEnji Cooperatf_test_case basic
3657718be8SEnji Cooperbasic_head()
3757718be8SEnji Cooper{
3857718be8SEnji Cooper	atf_set "descr" "Basic functionality test"
3957718be8SEnji Cooper}
4057718be8SEnji Cooperbasic_body()
4157718be8SEnji Cooper{
4257718be8SEnji Cooper	cat >in <<EOF
4357718be8SEnji Cooperz b m f
4457718be8SEnji Coopery c o e
4557718be8SEnji Cooperx a n h
4657718be8SEnji Cooperx a n g
4757718be8SEnji CooperEOF
4857718be8SEnji Cooper
4957718be8SEnji Cooper	cat >expout <<EOF
5057718be8SEnji Cooperx a n g
5157718be8SEnji Cooperx a n h
5257718be8SEnji Coopery c o e
5357718be8SEnji Cooperz b m f
5457718be8SEnji CooperEOF
5557718be8SEnji Cooper
5657718be8SEnji Cooper	atf_check -o file:expout sort in
5757718be8SEnji Cooper}
5857718be8SEnji Cooper
5957718be8SEnji Cooperatf_test_case empty_file
6057718be8SEnji Cooperempty_file_head()
6157718be8SEnji Cooper{
6257718be8SEnji Cooper	atf_set "descr" "Tests sorting an empty file"
6357718be8SEnji Cooper}
6457718be8SEnji Cooperempty_file_body()
6557718be8SEnji Cooper{
6657718be8SEnji Cooper	touch empty
67*f9e565abSCyril Zhang	atf_check -o empty sort empty
68*f9e565abSCyril Zhang	atf_check sort -c empty
69*f9e565abSCyril Zhang	atf_check sort -c -u empty
7057718be8SEnji Cooper}
7157718be8SEnji Cooper
7257718be8SEnji Cooperatf_test_case end_of_options
7357718be8SEnji Cooperend_of_options_head()
7457718be8SEnji Cooper{
7557718be8SEnji Cooper	atf_set "descr" "Determination of end of option list"
7657718be8SEnji Cooper}
7757718be8SEnji Cooperend_of_options_body()
7857718be8SEnji Cooper{
7957718be8SEnji Cooper	echo x >-k
80*f9e565abSCyril Zhang	atf_check -o file:-k -x "sort -- -k </dev/null"
81*f9e565abSCyril Zhang	atf_check -s not-exit:1 -e ignore -x "sort - -c </dev/null"
8257718be8SEnji Cooper}
8357718be8SEnji Cooper
8457718be8SEnji Cooperatf_test_case missing_newline
8557718be8SEnji Coopermissing_newline_head()
8657718be8SEnji Cooper{
8757718be8SEnji Cooper	atf_set "descr" "Tests with missing new line in input file"
8857718be8SEnji Cooper}
8957718be8SEnji Coopermissing_newline_body()
9057718be8SEnji Cooper{
9157718be8SEnji Cooper	printf '%s' x >in
9257718be8SEnji Cooper	atf_check -o inline:'x\n' sort in
9357718be8SEnji Cooper}
9457718be8SEnji Cooper
9557718be8SEnji Cooperatf_test_case null_bytes
9657718be8SEnji Coopernull_bytes_head()
9757718be8SEnji Cooper{
9857718be8SEnji Cooper	atf_set "descr" "Tests the behavior of null bytes"
9957718be8SEnji Cooper}
10057718be8SEnji Coopernull_bytes_body()
10157718be8SEnji Cooper{
10257718be8SEnji Cooper	printf '\0b\n\0a\n' >in
103*f9e565abSCyril Zhang	atf_check -o inline:'\0a\n\0b\n' sort in
10457718be8SEnji Cooper}
10557718be8SEnji Cooper
10657718be8SEnji Cooperatf_test_case long_records
10757718be8SEnji Cooperlong_records_head()
10857718be8SEnji Cooper{
10957718be8SEnji Cooper	atf_set "descr" "Tests long lines and keys"
11057718be8SEnji Cooper}
11157718be8SEnji Cooperlong_records_body()
11257718be8SEnji Cooper{
11357718be8SEnji Cooper	awk 'BEGIN {	x="x"
11457718be8SEnji Cooper	for(i=1; i<=12; i++) x = x x
11557718be8SEnji Cooper	for(i=15; i<=25; i++) print x i
11657718be8SEnji Cooper}' >in
11757718be8SEnji Cooper
11857718be8SEnji Cooper	awk 'BEGIN {	x="x"
11957718be8SEnji Cooper	for(i=1; i<=12; i++) x = x x
12057718be8SEnji Cooper	for(i=25; i>=15; i--) print x i
12157718be8SEnji Cooper}' >out
12257718be8SEnji Cooper
12357718be8SEnji Cooper	atf_check -o file:out sort -r in
12457718be8SEnji Cooper	atf_check -o file:out sort -k 1,1r -k 1 in
12557718be8SEnji Cooper}
12657718be8SEnji Cooper
12757718be8SEnji Cooperatf_test_case long_file
12857718be8SEnji Cooperlong_file_head()
12957718be8SEnji Cooper{
13057718be8SEnji Cooper	atf_set "descr" "Tests with a long file to try to force intermediate" \
13157718be8SEnji Cooper	    "files"
13257718be8SEnji Cooper}
13357718be8SEnji Cooperlong_file_body()
13457718be8SEnji Cooper{
13557718be8SEnji Cooper	awk 'BEGIN { for(i=0; i<20000; i++) print rand() }' >in
136*f9e565abSCyril Zhang	sort -r in | awk '$0 "x" != x { print ; x = $0 "x" }' >out
13757718be8SEnji Cooper	atf_check -o file:out sort -u -r in
13857718be8SEnji Cooper}
13957718be8SEnji Cooper
14057718be8SEnji Cooperatf_test_case any_char
14157718be8SEnji Cooperany_char_head()
14257718be8SEnji Cooper{
14357718be8SEnji Cooper	atf_set "descr" "Tests with files containing non-printable/extended" \
14457718be8SEnji Cooper	    "characters"
14557718be8SEnji Cooper}
14657718be8SEnji Cooperany_char_body()
14757718be8SEnji Cooper{
14857718be8SEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_any_char_dflag_out.txt \
14957718be8SEnji Cooper	    sort -d -k 2 $(atf_get_srcdir)/d_any_char_in.txt
15057718be8SEnji Cooper
15157718be8SEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_any_char_fflag_out.txt \
15257718be8SEnji Cooper	    sort -f -k 2 $(atf_get_srcdir)/d_any_char_in.txt
15357718be8SEnji Cooper
15457718be8SEnji Cooper	atf_check -o file:$(atf_get_srcdir)/d_any_char_iflag_out.txt \
15557718be8SEnji Cooper	    sort -i -k 2 $(atf_get_srcdir)/d_any_char_in.txt
15657718be8SEnji Cooper}
15757718be8SEnji Cooper
15857718be8SEnji Cooperatf_test_case bflag
15957718be8SEnji Cooperbflag_head()
16057718be8SEnji Cooper{
16157718be8SEnji Cooper	atf_set "descr" "Tests the -b flag"
16257718be8SEnji Cooper}
16357718be8SEnji Cooperbflag_body()
16457718be8SEnji Cooper{
165*f9e565abSCyril Zhang	atf_expect_fail "Behavior differs from NetBSD"
16657718be8SEnji Cooper	cat >in <<EOF
16757718be8SEnji Cooper  b
16857718be8SEnji Cooper a
16957718be8SEnji CooperEOF
17057718be8SEnji Cooper
17157718be8SEnji Cooper	atf_check -o file:in sort -b in
17257718be8SEnji Cooper	atf_check -o file:in -x "sort -b <in"
17357718be8SEnji Cooper	atf_check -s exit:1 -o ignore -e ignore -x "sort in | sort -c -r"
17457718be8SEnji Cooper}
17557718be8SEnji Cooper
17657718be8SEnji Cooperatf_test_case cflag
17757718be8SEnji Coopercflag_head()
17857718be8SEnji Cooper{
17957718be8SEnji Cooper	atf_set "descr" "Tests the -c flag"
18057718be8SEnji Cooper}
18157718be8SEnji Coopercflag_body()
18257718be8SEnji Cooper{
18357718be8SEnji Cooper	cat >in <<EOF
18457718be8SEnji Cooperb
18557718be8SEnji Coopera
18657718be8SEnji CooperEOF
18757718be8SEnji Cooper
188*f9e565abSCyril Zhang	atf_check -s exit:1 -e ignore sort -c in
18957718be8SEnji Cooper}
19057718be8SEnji Cooper
19157718be8SEnji Cooperatf_test_case kflag_one_field
19257718be8SEnji Cooperkflag_one_field_head()
19357718be8SEnji Cooper{
19457718be8SEnji Cooper	atf_set "descr" "Tests the -k flag with one field"
19557718be8SEnji Cooper}
19657718be8SEnji Cooperkflag_one_field_body()
19757718be8SEnji Cooper{
19857718be8SEnji Cooper	cat >in <<EOF
19957718be8SEnji Cooperz b m f
20057718be8SEnji Coopery c o e
20157718be8SEnji Cooperx a n h
20257718be8SEnji Cooperx a n g
20357718be8SEnji CooperEOF
20457718be8SEnji Cooper
20557718be8SEnji Cooper	cat >expout <<EOF
20657718be8SEnji Cooperx a n g
20757718be8SEnji Cooperx a n h
20857718be8SEnji Cooperz b m f
20957718be8SEnji Coopery c o e
21057718be8SEnji CooperEOF
21157718be8SEnji Cooper
21257718be8SEnji Cooper	atf_check -o file:expout sort -k2.1 in
21357718be8SEnji Cooper}
21457718be8SEnji Cooper
21557718be8SEnji Cooperatf_test_case kflag_two_fields
21657718be8SEnji Cooperkflag_two_fields_head()
21757718be8SEnji Cooper{
21857718be8SEnji Cooper	atf_set "descr" "Tests the -k flag with two fields"
21957718be8SEnji Cooper}
22057718be8SEnji Cooperkflag_two_fields_body()
22157718be8SEnji Cooper{
22257718be8SEnji Cooper	cat >in <<EOF
22357718be8SEnji Cooperz b m f
22457718be8SEnji Coopery c o e
22557718be8SEnji Cooperx a n h
22657718be8SEnji Cooperx a n g
22757718be8SEnji CooperEOF
22857718be8SEnji Cooper
22957718be8SEnji Cooper	cat >expout <<EOF
23057718be8SEnji Cooperx a n h
23157718be8SEnji Cooperx a n g
23257718be8SEnji Cooperz b m f
23357718be8SEnji Coopery c o e
23457718be8SEnji CooperEOF
235*f9e565abSCyril Zhang	atf_check -o file:expout sort -s -k2.1,2.0 in
23657718be8SEnji Cooper}
23757718be8SEnji Cooper
23857718be8SEnji Cooperatf_test_case kflag_many_fields
23957718be8SEnji Cooperkflag_many_fields_head()
24057718be8SEnji Cooper{
24157718be8SEnji Cooper	atf_set "descr" "Tests the -k flag with many fields"
24257718be8SEnji Cooper}
24357718be8SEnji Cooperkflag_many_fields_body()
24457718be8SEnji Cooper{
24557718be8SEnji Cooper	cat >in <<EOF
24657718be8SEnji Cooper0:2:3:4:5:6:7:8:9
24757718be8SEnji Cooper1:1:3:4:5:6:7:8:9
24857718be8SEnji Cooper1:2:2:4:5:6:7:8:9
24957718be8SEnji Cooper1:2:3:3:5:6:7:8:9
25057718be8SEnji Cooper1:2:3:4:4:6:7:8:9
25157718be8SEnji Cooper1:2:3:4:5:5:7:8:9
25257718be8SEnji Cooper1:2:3:4:5:6:6:8:9
25357718be8SEnji Cooper1:2:3:4:5:6:7:7:9
25457718be8SEnji Cooper1:2:3:4:5:6:7:8:8
25557718be8SEnji CooperEOF
25657718be8SEnji Cooper
25757718be8SEnji Cooper	cat >out <<EOF
25857718be8SEnji Cooper1:2:3:4:5:6:7:8:8
25957718be8SEnji Cooper1:2:3:4:5:6:7:7:9
26057718be8SEnji Cooper1:2:3:4:5:6:6:8:9
26157718be8SEnji Cooper1:2:3:4:5:5:7:8:9
26257718be8SEnji Cooper1:2:3:4:4:6:7:8:9
26357718be8SEnji Cooper1:2:3:3:5:6:7:8:9
26457718be8SEnji Cooper1:2:2:4:5:6:7:8:9
26557718be8SEnji Cooper1:1:3:4:5:6:7:8:9
26657718be8SEnji Cooper0:2:3:4:5:6:7:8:9
26757718be8SEnji CooperEOF
26857718be8SEnji Cooper
26957718be8SEnji Cooper	atf_check -o file:out sort -t: -k9 -k8 -k7 -k6 -k5 -k4 -k3 \
27057718be8SEnji Cooper	    -k2 -k1 in
27157718be8SEnji Cooper}
27257718be8SEnji Cooper
27357718be8SEnji Cooperatf_test_case kflag_outofbounds
27457718be8SEnji Cooperkflag_outofbounds_head()
27557718be8SEnji Cooper{
27657718be8SEnji Cooper	atf_set "descr" "Tests the -k flag with out of bounds fields"
27757718be8SEnji Cooper}
27857718be8SEnji Cooperkflag_outofbounds_body()
27957718be8SEnji Cooper{
28057718be8SEnji Cooper	cat >in <<EOF
28157718be8SEnji Cooper0 5
28257718be8SEnji Cooper1 4
28357718be8SEnji Cooper2 3
28457718be8SEnji Cooper3 2
28557718be8SEnji Cooper4 1
28657718be8SEnji Cooper5 0
28757718be8SEnji CooperEOF
28857718be8SEnji Cooper
28957718be8SEnji Cooper	atf_check -o file:in sort -k2.2,2.1 -k2.3,2.4 in
29057718be8SEnji Cooper}
29157718be8SEnji Cooper
29257718be8SEnji Cooperatf_test_case kflag_nonmonotone
29357718be8SEnji Cooperkflag_nonmonotone_head()
29457718be8SEnji Cooper{
29557718be8SEnji Cooper	atf_set "descr" "Tests the -k flag with apparently nonmonotone" \
29657718be8SEnji Cooper	    "field specs"
29757718be8SEnji Cooper}
29857718be8SEnji Cooperkflag_nonmonotone_body()
29957718be8SEnji Cooper{
30057718be8SEnji Cooper	cat >in <<EOF
30157718be8SEnji Cooperaaaa c
30257718be8SEnji Cooperx a
30357718be8SEnji Cooper0 b
30457718be8SEnji CooperEOF
30557718be8SEnji Cooper
30657718be8SEnji Cooper	atf_check -o file:in sort -k2,1.3 -k2.5,2.5 in
30757718be8SEnji Cooper}
30857718be8SEnji Cooper
30957718be8SEnji Cooperatf_test_case kflag_limits
31057718be8SEnji Cooperkflag_limits_head()
31157718be8SEnji Cooper{
31257718be8SEnji Cooper	atf_set "descr" "Tests the -k flag field limits"
31357718be8SEnji Cooper}
31457718be8SEnji Cooperkflag_limits_body()
31557718be8SEnji Cooper{
31657718be8SEnji Cooper	cat >in <<EOF
31757718be8SEnji Coopera	2
31857718be8SEnji Coopera	1
31957718be8SEnji Cooperb	2
32057718be8SEnji Cooperb	1
32157718be8SEnji CooperEOF
32257718be8SEnji Cooper
32357718be8SEnji Cooper	cat >out <<EOF
32457718be8SEnji Cooperb	2
32557718be8SEnji Cooperb	1
32657718be8SEnji Coopera	2
32757718be8SEnji Coopera	1
32857718be8SEnji CooperEOF
32957718be8SEnji Cooper
330*f9e565abSCyril Zhang	# On FreeBSD, key options override global options,
331*f9e565abSCyril Zhang	# so r is required as an option for the second key.
332*f9e565abSCyril Zhang	atf_check -o file:out sort -r -k1,1 -k2nr in
33357718be8SEnji Cooper}
33457718be8SEnji Cooper
33557718be8SEnji Cooperatf_test_case kflag_alpha
33657718be8SEnji Cooperkflag_alpha_head()
33757718be8SEnji Cooper{
33857718be8SEnji Cooper	atf_set "descr" "Tests the -k flag with various alpha fields"
33957718be8SEnji Cooper}
34057718be8SEnji Cooperkflag_alpha_body()
34157718be8SEnji Cooper{
34257718be8SEnji Cooper	sort >in <<EOF
34357718be8SEnji Cooper01:04:19:01:16:01:21:01 a
34457718be8SEnji Cooper02:03:13:15:13:19:15:02  a
34557718be8SEnji Cooper03:02:07:09:07:13:09:03   a
34657718be8SEnji Cooper04:01:01:03:01:07:03:04    a
34757718be8SEnji Cooper05:08:20:16:17:02:20:05 aa
34857718be8SEnji Cooper06:07:14:18:14:20:14:06  aa
34957718be8SEnji Cooper07:06:08:10:08:14:08:07   aa
35057718be8SEnji Cooper08:05:02:04:02:08:02:08    aa
35157718be8SEnji Cooper09:16:22:02:22:04:24:13 b
35257718be8SEnji Cooper10:15:16:20:19:22:18:14  b
35357718be8SEnji Cooper11:14:10:12:10:16:12:15   b
35457718be8SEnji Cooper12:13:04:06:04:10:06:16    b
35557718be8SEnji Cooper13:24:24:22:24:06:22:21 bb
35657718be8SEnji Cooper14:23:18:24:21:24:16:22  bb
35757718be8SEnji Cooper15:22:12:14:12:18:10:23   bb
35857718be8SEnji Cooper16:21:06:08:06:12:04:24    bb
35957718be8SEnji Cooper17:12:21:21:18:03:19:09 ab
36057718be8SEnji Cooper18:11:15:19:15:21:13:10  ab
36157718be8SEnji Cooper19:10:09:11:09:15:07:11   ab
36257718be8SEnji Cooper20:09:03:05:03:09:01:12    ab
36357718be8SEnji Cooper21:20:23:17:23:05:23:17 ba
36457718be8SEnji Cooper22:19:17:23:20:23:17:18  ba
36557718be8SEnji Cooper23:18:11:13:11:17:11:19   ba
36657718be8SEnji Cooper24:17:05:07:05:11:05:20    ba
36757718be8SEnji CooperEOF
36857718be8SEnji Cooper
369*f9e565abSCyril Zhang	atf_check -x "sort -k2b -k2 in >xx"
37057718be8SEnji Cooper	atf_check -e ignore sort -c -t: -k2n xx
37157718be8SEnji Cooper
372*f9e565abSCyril Zhang	atf_check -x "sort -k2,2.1b -k2 in >xx"
37357718be8SEnji Cooper	atf_check -e ignore sort -c -t: -k3n xx
37457718be8SEnji Cooper
375*f9e565abSCyril Zhang	atf_check -x "sort -k2.3 -k2 in >xx"
37657718be8SEnji Cooper	atf_check -e ignore sort -c -t: -k4n xx
37757718be8SEnji Cooper
378*f9e565abSCyril Zhang	atf_check -x "sort -k2b,2.3 -k2 in >xx"
37957718be8SEnji Cooper	atf_check -e ignore sort -c -t: -k5n xx
38057718be8SEnji Cooper
381*f9e565abSCyril Zhang	atf_check -x "sort -k2.3,2.1b -k2 in >xx"
38257718be8SEnji Cooper	atf_check -e ignore sort -c -t: -k6n xx
38357718be8SEnji Cooper
384*f9e565abSCyril Zhang	atf_check -x "sort -k2,2.1b -k2r in >xx"
38557718be8SEnji Cooper	atf_check -e ignore sort -c -t: -k7n xx
38657718be8SEnji Cooper
387*f9e565abSCyril Zhang	atf_check -x "sort -b -k2,2 -k2 in >xx"
38857718be8SEnji Cooper	atf_check -e ignore sort -c -t: -k8n xx
38957718be8SEnji Cooper
39057718be8SEnji Cooper	# XXX This test is broken.  The standard is not clear on the behavior.
39157718be8SEnji Cooper	#atf_check -x "sort -S -b -k2,2b -k2 in >xx"
39257718be8SEnji Cooper	#atf_check -e ignore sort -c -t: -k3n xx
39357718be8SEnji Cooper}
39457718be8SEnji Cooper
39557718be8SEnji Cooperatf_test_case kflag_no_end
39657718be8SEnji Cooperkflag_no_end_head()
39757718be8SEnji Cooper{
39857718be8SEnji Cooper	atf_set "descr" "Tests the -k flag with a field without end"
39957718be8SEnji Cooper}
40057718be8SEnji Cooperkflag_no_end_body()
40157718be8SEnji Cooper{
40257718be8SEnji Cooper	cat >in <<EOF
40357718be8SEnji Coopera-B
40457718be8SEnji Coopera+b
40557718be8SEnji Coopera b
40657718be8SEnji CooperA+b
40757718be8SEnji Coopera	b
40857718be8SEnji CooperEOF
40957718be8SEnji Cooper
41057718be8SEnji Cooper	cat >out <<EOF
41157718be8SEnji Coopera	b
41257718be8SEnji Coopera b
41357718be8SEnji CooperA+b
41457718be8SEnji Coopera-B
41557718be8SEnji Coopera+b
41657718be8SEnji CooperEOF
41757718be8SEnji Cooper
41857718be8SEnji Cooper	atf_check -o file:out sort -df -k 1 -k 1d <in
41957718be8SEnji Cooper}
42057718be8SEnji Cooper
42157718be8SEnji Cooperatf_test_case mflag
42257718be8SEnji Coopermflag_head()
42357718be8SEnji Cooper{
42457718be8SEnji Cooper	atf_set "descr" "Tests the -m flag"
42557718be8SEnji Cooper}
42657718be8SEnji Coopermflag_body()
42757718be8SEnji Cooper{
42857718be8SEnji Cooper	cat >in1 <<EOF
42957718be8SEnji Coopera
43057718be8SEnji Cooperab
43157718be8SEnji Cooperab
43257718be8SEnji Cooperbc
43357718be8SEnji Cooperca
43457718be8SEnji CooperEOF
43557718be8SEnji Cooper	cat >in2 <<EOF
43657718be8SEnji CooperZ
43757718be8SEnji Coopera
43857718be8SEnji Cooperaa
43957718be8SEnji Cooperac
44057718be8SEnji Cooperc
44157718be8SEnji CooperEOF
44257718be8SEnji Cooper	cat >out <<EOF
44357718be8SEnji CooperZ
44457718be8SEnji Coopera
44557718be8SEnji Coopera
44657718be8SEnji Cooperaa
44757718be8SEnji Cooperab
44857718be8SEnji Cooperab
44957718be8SEnji Cooperac
45057718be8SEnji Cooperbc
45157718be8SEnji Cooperc
45257718be8SEnji Cooperca
45357718be8SEnji CooperEOF
45457718be8SEnji Cooper
455*f9e565abSCyril Zhang	atf_check -o file:out sort -m in1 in2
45657718be8SEnji Cooper}
45757718be8SEnji Cooper
45857718be8SEnji Cooperatf_test_case mflag_uflag
45957718be8SEnji Coopermflag_uflag_head()
46057718be8SEnji Cooper{
46157718be8SEnji Cooper	atf_set "descr" "Tests the -m flag together with -u"
46257718be8SEnji Cooper}
46357718be8SEnji Coopermflag_uflag_body()
46457718be8SEnji Cooper{
46557718be8SEnji Cooper	cat >in <<EOF
46657718be8SEnji Coopera
46757718be8SEnji Cooperb
46857718be8SEnji Cooperc
46957718be8SEnji Cooperd
47057718be8SEnji CooperEOF
47157718be8SEnji Cooper
47257718be8SEnji Cooper	atf_check -o file:in sort -m -u in
47357718be8SEnji Cooper}
47457718be8SEnji Cooper
47557718be8SEnji Cooperatf_test_case mflag_uflag_first
47657718be8SEnji Coopermflag_uflag_first_head()
47757718be8SEnji Cooper{
47857718be8SEnji Cooper	atf_set "descr" "Tests that the -m flag together with -u picks the" \
47957718be8SEnji Cooper	    "first among equal"
48057718be8SEnji Cooper}
48157718be8SEnji Coopermflag_uflag_first_body()
48257718be8SEnji Cooper{
48357718be8SEnji Cooper	cat >in <<EOF
48457718be8SEnji Cooper3B
48557718be8SEnji Cooper3b
48657718be8SEnji Cooper3B2
48757718be8SEnji Cooper~3B2
48857718be8SEnji Cooper4.1
48957718be8SEnji Cooper41
49057718be8SEnji Cooper5
49157718be8SEnji Cooper5.
49257718be8SEnji CooperEOF
49357718be8SEnji Cooper
49457718be8SEnji Cooper	cat >out <<EOF
49557718be8SEnji Cooper3B
49657718be8SEnji Cooper3B2
49757718be8SEnji Cooper4.1
49857718be8SEnji Cooper5
49957718be8SEnji CooperEOF
50057718be8SEnji Cooper
50157718be8SEnji Cooper	atf_check -o file:out sort -mudf in
50257718be8SEnji Cooper	atf_check -o file:out sort -mudf -k1 in
50357718be8SEnji Cooper}
50457718be8SEnji Cooper
50557718be8SEnji Cooperatf_test_case nflag
50657718be8SEnji Coopernflag_head()
50757718be8SEnji Cooper{
50857718be8SEnji Cooper	atf_set "descr" "Tests the -n flag"
50957718be8SEnji Cooper}
51057718be8SEnji Coopernflag_body()
51157718be8SEnji Cooper{
51257718be8SEnji Cooper	cat >in <<EOF
51357718be8SEnji Cooper-99.0
51457718be8SEnji Cooper-99.1
51557718be8SEnji Cooper-.0002
51657718be8SEnji Cooper-10
51757718be8SEnji Cooper2
51857718be8SEnji Cooper0010.000000000000000000000000000000000001
51957718be8SEnji Cooper10
52057718be8SEnji Cooper3x
52157718be8SEnji Cooperx
52257718be8SEnji CooperEOF
52357718be8SEnji Cooper
52457718be8SEnji Cooper	cat >expout <<EOF
52557718be8SEnji Cooper-99.1
52657718be8SEnji Cooper-99.0
52757718be8SEnji Cooper-10
52857718be8SEnji Cooper-.0002
52957718be8SEnji Cooperx
53057718be8SEnji Cooper2
53157718be8SEnji Cooper3x
53257718be8SEnji Cooper10
53357718be8SEnji Cooper0010.000000000000000000000000000000000001
53457718be8SEnji CooperEOF
53557718be8SEnji Cooper
53657718be8SEnji Cooper	atf_check -o file:expout sort -n in
53757718be8SEnji Cooper}
53857718be8SEnji Cooper
53957718be8SEnji Cooperatf_test_case nflag_rflag
54057718be8SEnji Coopernflag_rflag_head()
54157718be8SEnji Cooper{
54257718be8SEnji Cooper	atf_set "descr" "Tests the -n and -r flag combination"
54357718be8SEnji Cooper}
54457718be8SEnji Coopernflag_rflag_body()
54557718be8SEnji Cooper{
54657718be8SEnji Cooper	cat >in <<EOF
54757718be8SEnji Cooper1
54857718be8SEnji Cooper123
54957718be8SEnji Cooper2
55057718be8SEnji CooperEOF
55157718be8SEnji Cooper
55257718be8SEnji Cooper	cat >expout <<EOF
55357718be8SEnji Cooper123
55457718be8SEnji Cooper2
55557718be8SEnji Cooper1
55657718be8SEnji CooperEOF
55757718be8SEnji Cooper
55857718be8SEnji Cooper	atf_check -o file:expout sort -rn in
55957718be8SEnji Cooper}
56057718be8SEnji Cooper
56157718be8SEnji Cooperatf_test_case oflag
56257718be8SEnji Cooperoflag_head()
56357718be8SEnji Cooper{
56457718be8SEnji Cooper	atf_set "descr" "Tests the -o flag"
56557718be8SEnji Cooper}
56657718be8SEnji Cooperoflag_body()
56757718be8SEnji Cooper{
56857718be8SEnji Cooper	cat >in <<EOF
56957718be8SEnji Cooper1
57057718be8SEnji Cooper1
57157718be8SEnji Cooper2
57257718be8SEnji Cooper2
57357718be8SEnji Cooper3
57457718be8SEnji Cooper3
57557718be8SEnji Cooper4
57657718be8SEnji Cooper4
57757718be8SEnji CooperEOF
57857718be8SEnji Cooper
57957718be8SEnji Cooper	atf_check sort -u -o in in
58057718be8SEnji Cooper
58157718be8SEnji Cooper	cat >expout <<EOF
58257718be8SEnji Cooper1
58357718be8SEnji Cooper2
58457718be8SEnji Cooper3
58557718be8SEnji Cooper4
58657718be8SEnji CooperEOF
58757718be8SEnji Cooper
58857718be8SEnji Cooper	atf_check -o file:expout cat in
58957718be8SEnji Cooper}
59057718be8SEnji Cooper
59157718be8SEnji Cooperatf_test_case oflag_displaced
59257718be8SEnji Cooperoflag_displaced_head()
59357718be8SEnji Cooper{
59457718be8SEnji Cooper	atf_set "descr" "Tests the -o flag after the file names"
59557718be8SEnji Cooper}
59657718be8SEnji Cooperoflag_displaced_body()
59757718be8SEnji Cooper{
598*f9e565abSCyril Zhang	atf_check sort /dev/null -o out
59957718be8SEnji Cooper	test -f out || atf_fail "File not created"
60057718be8SEnji Cooper}
60157718be8SEnji Cooper
60257718be8SEnji Cooperatf_test_case rflag
60357718be8SEnji Cooperrflag_head()
60457718be8SEnji Cooper{
60557718be8SEnji Cooper	atf_set "descr" "Tests the -r flag"
60657718be8SEnji Cooper}
60757718be8SEnji Cooperrflag_body()
60857718be8SEnji Cooper{
60957718be8SEnji Cooper	cat >in <<EOF
61057718be8SEnji Cooperz b m f
61157718be8SEnji Coopery c o e
61257718be8SEnji Cooperx a n h
61357718be8SEnji Cooperx a n g
61457718be8SEnji CooperEOF
61557718be8SEnji Cooper
61657718be8SEnji Cooper	cat >expout <<EOF
61757718be8SEnji Cooperz b m f
61857718be8SEnji Coopery c o e
61957718be8SEnji Cooperx a n h
62057718be8SEnji Cooperx a n g
62157718be8SEnji CooperEOF
62257718be8SEnji Cooper
62357718be8SEnji Cooper	atf_check -o file:expout sort -r in
62457718be8SEnji Cooper}
62557718be8SEnji Cooper
62657718be8SEnji Cooperatf_test_case sflag
62757718be8SEnji Coopersflag_head()
62857718be8SEnji Cooper{
62957718be8SEnji Cooper	atf_set "descr" "Tests the -s flag"
63057718be8SEnji Cooper}
63157718be8SEnji Coopersflag_body()
63257718be8SEnji Cooper{
63357718be8SEnji Cooper	cat >in <<EOF
63457718be8SEnji Coopera 2
63557718be8SEnji Cooperb 1
63657718be8SEnji Cooperc 2
63757718be8SEnji Coopera 1
63857718be8SEnji Cooperb 2
63957718be8SEnji Cooperc 1
64057718be8SEnji CooperEOF
64157718be8SEnji Cooper
64257718be8SEnji Cooper	cat >out <<EOF
64357718be8SEnji Coopera 2
64457718be8SEnji Coopera 1
64557718be8SEnji Cooperb 1
64657718be8SEnji Cooperb 2
64757718be8SEnji Cooperc 2
64857718be8SEnji Cooperc 1
64957718be8SEnji CooperEOF
65057718be8SEnji Cooper
65157718be8SEnji Cooper	atf_check -o file:out sort -s -k1,1 in
65257718be8SEnji Cooper}
65357718be8SEnji Cooper
65457718be8SEnji Cooperatf_test_case sflag_many_files
65557718be8SEnji Coopersflag_many_files_head()
65657718be8SEnji Cooper{
65757718be8SEnji Cooper	atf_set "descr" "Tests the -s flag with multiple files"
65857718be8SEnji Cooper}
65957718be8SEnji Coopersflag_many_files_body()
66057718be8SEnji Cooper{
66157718be8SEnji Cooper	cat >in1 <<EOF
66257718be8SEnji Cooperc 2
66357718be8SEnji Coopera 2
66457718be8SEnji CooperEOF
66557718be8SEnji Cooper
66657718be8SEnji Cooper	cat >in2 <<EOF
66757718be8SEnji Cooperc 1
66857718be8SEnji Cooperb 1
66957718be8SEnji Coopera 1
67057718be8SEnji CooperEOF
67157718be8SEnji Cooper
67257718be8SEnji Cooper	cat >out <<EOF
67357718be8SEnji Cooperc 2
67457718be8SEnji Cooperb 1
67557718be8SEnji Coopera 2
67657718be8SEnji CooperEOF
67757718be8SEnji Cooper
67857718be8SEnji Cooper	atf_check -o file:out sort -smru -k1,1 in1 in1 in2 in2
67957718be8SEnji Cooper}
68057718be8SEnji Cooper
68157718be8SEnji Cooperatf_test_case tflag
68257718be8SEnji Coopertflag_head()
68357718be8SEnji Cooper{
68457718be8SEnji Cooper	atf_set "descr" "Tests the -t flag"
68557718be8SEnji Cooper}
68657718be8SEnji Coopertflag_body()
68757718be8SEnji Cooper{
68857718be8SEnji Cooper	cat >in <<EOF
68957718be8SEnji Coopera:
69057718be8SEnji Coopera!
69157718be8SEnji CooperEOF
69257718be8SEnji Cooper
69357718be8SEnji Cooper	atf_check -o file:in sort -t : -r +0 in
69457718be8SEnji Cooper	atf_check -o file:in sort -t : +0 -1 in
69557718be8SEnji Cooper	atf_check -o file:in sort -t : -r -k 1 in
69657718be8SEnji Cooper	atf_check -o file:in sort -t : -k 1,1 in
69757718be8SEnji Cooper}
69857718be8SEnji Cooper
69957718be8SEnji Cooperatf_test_case tflag_alphabetic
70057718be8SEnji Coopertflag_alphabetic_head()
70157718be8SEnji Cooper{
70257718be8SEnji Cooper	atf_set "descr" "Tests the -t flag with a character as the delimiter"
70357718be8SEnji Cooper}
70457718be8SEnji Coopertflag_alphabetic_body()
70557718be8SEnji Cooper{
70657718be8SEnji Cooper	cat >in <<EOF
70757718be8SEnji CooperzXa
70857718be8SEnji CooperyXa
70957718be8SEnji CooperzXb
71057718be8SEnji CooperEOF
71157718be8SEnji Cooper
71257718be8SEnji Cooper	atf_check -o file:in sort -tX -k2 -k1r,1 in
71357718be8SEnji Cooper}
71457718be8SEnji Cooper
71557718be8SEnji Cooperatf_test_case tflag_char_pos
71657718be8SEnji Coopertflag_char_pos_head()
71757718be8SEnji Cooper{
71857718be8SEnji Cooper	atf_set "descr" "Tests the -t flag with character positions in fields"
71957718be8SEnji Cooper}
72057718be8SEnji Coopertflag_char_pos_body()
72157718be8SEnji Cooper{
72257718be8SEnji Cooper	cat >in <<EOF
72357718be8SEnji Cooper: ab
72457718be8SEnji Cooper:bac
72557718be8SEnji CooperEOF
72657718be8SEnji Cooper
72757718be8SEnji Cooper	cat >out <<EOF
72857718be8SEnji Cooper:bac
72957718be8SEnji Cooper: ab
73057718be8SEnji CooperEOF
73157718be8SEnji Cooper
73257718be8SEnji Cooper	atf_check -o file:out sort -b -t: +1.1 in
73357718be8SEnji Cooper	atf_check -o file:out sort -t: +1.1r in
73457718be8SEnji Cooper	atf_check -o file:out sort -b -t: -k 2.2 in
73557718be8SEnji Cooper	atf_check -o file:out sort -t: -k 2.2r in
73657718be8SEnji Cooper}
73757718be8SEnji Cooper
73857718be8SEnji Cooperatf_test_case tflag_whitespace
73957718be8SEnji Coopertflag_whitespace_head()
74057718be8SEnji Cooper{
74157718be8SEnji Cooper	atf_set "descr" "Tests the -t flag with spaces and tabs as the" \
74257718be8SEnji Cooper	    "delimiter"
74357718be8SEnji Cooper}
74457718be8SEnji Coopertflag_whitespace_body()
74557718be8SEnji Cooper{
74657718be8SEnji Cooper	cat >in <<EOF
74757718be8SEnji Cooper b c
74857718be8SEnji Cooper b	c
74957718be8SEnji Cooper	b c
75057718be8SEnji CooperEOF
75157718be8SEnji Cooper
75257718be8SEnji Cooper	atf_check -o file:in sort -t ' ' -k2,2 in
75357718be8SEnji Cooper	atf_check -o file:in sort -t ' ' -k2.1,2.0 in
75457718be8SEnji Cooper
75557718be8SEnji Cooper	cat >out <<EOF
75657718be8SEnji Cooper b c
75757718be8SEnji Cooper	b c
75857718be8SEnji Cooper b	c
75957718be8SEnji CooperEOF
76057718be8SEnji Cooper
76157718be8SEnji Cooper	atf_check -o file:out sort -t '	' -k2,2 in
76257718be8SEnji Cooper	atf_check -o file:out sort -t '	' -k2.1,2.0 in
76357718be8SEnji Cooper
76457718be8SEnji Cooper	cat >out <<EOF
76557718be8SEnji Cooper b	c
76657718be8SEnji Cooper	b c
76757718be8SEnji Cooper b c
76857718be8SEnji CooperEOF
76957718be8SEnji Cooper
770*f9e565abSCyril Zhang	atf_check -o file:out sort -k2 in
77157718be8SEnji Cooper
77257718be8SEnji Cooper	cat >out <<EOF
77357718be8SEnji Cooper	b c
77457718be8SEnji Cooper b	c
77557718be8SEnji Cooper b c
77657718be8SEnji CooperEOF
77757718be8SEnji Cooper
778*f9e565abSCyril Zhang	atf_check -o file:out sort -k2b in
77957718be8SEnji Cooper}
78057718be8SEnji Cooper
78157718be8SEnji Cooperatf_test_case uflag
78257718be8SEnji Cooperuflag_head()
78357718be8SEnji Cooper{
78457718be8SEnji Cooper	atf_set "descr" "Tests the -u flag"
78557718be8SEnji Cooper}
78657718be8SEnji Cooperuflag_body()
78757718be8SEnji Cooper{
78857718be8SEnji Cooper	cat >in <<EOF
78957718be8SEnji Coopera
79057718be8SEnji Cooperaa
79157718be8SEnji Cooperaaa
79257718be8SEnji Cooperaa
79357718be8SEnji CooperEOF
79457718be8SEnji Cooper
79557718be8SEnji Cooper	cat >expout <<EOF
79657718be8SEnji Coopera
79757718be8SEnji Cooperaa
79857718be8SEnji Cooperaaa
79957718be8SEnji CooperEOF
80057718be8SEnji Cooper
80157718be8SEnji Cooper	atf_check -o file:expout sort -u in
80257718be8SEnji Cooper}
80357718be8SEnji Cooper
80457718be8SEnji Cooperatf_test_case uflag_rflag
80557718be8SEnji Cooperuflag_rflag_head()
80657718be8SEnji Cooper{
80757718be8SEnji Cooper	atf_set "descr" "Tests the -u and -r flag combination"
80857718be8SEnji Cooper}
80957718be8SEnji Cooperuflag_rflag_body()
81057718be8SEnji Cooper{
81157718be8SEnji Cooper	cat >in <<EOF
81257718be8SEnji Coopera
81357718be8SEnji Cooperaa
81457718be8SEnji Cooperaaa
81557718be8SEnji Cooperaa
81657718be8SEnji CooperEOF
81757718be8SEnji Cooper
81857718be8SEnji Cooper	cat >expout <<EOF
81957718be8SEnji Cooperaaa
82057718be8SEnji Cooperaa
82157718be8SEnji Coopera
82257718be8SEnji CooperEOF
82357718be8SEnji Cooper
82457718be8SEnji Cooper	atf_check -o file:expout sort -ru in
82557718be8SEnji Cooper}
82657718be8SEnji Cooper
82757718be8SEnji Cooperatf_test_case plus_one
82857718be8SEnji Cooperplus_one_head()
82957718be8SEnji Cooper{
83057718be8SEnji Cooper	atf_set "descr" "Tests +- addressing: +1 should become -k2.1"
83157718be8SEnji Cooper}
83257718be8SEnji Cooperplus_one_body()
83357718be8SEnji Cooper{
83457718be8SEnji Cooper	cat >in <<EOF
83557718be8SEnji Cooperz b m f
83657718be8SEnji Coopery c o e
83757718be8SEnji Cooperx a n h
83857718be8SEnji Cooperx a n g
83957718be8SEnji CooperEOF
84057718be8SEnji Cooper
84157718be8SEnji Cooper	cat >expout <<EOF
84257718be8SEnji Cooperx a n g
84357718be8SEnji Cooperx a n h
84457718be8SEnji Cooperz b m f
84557718be8SEnji Coopery c o e
84657718be8SEnji CooperEOF
84757718be8SEnji Cooper
84857718be8SEnji Cooper	atf_check -o file:expout sort +1 in
84957718be8SEnji Cooper}
85057718be8SEnji Cooper
85157718be8SEnji Cooperatf_test_case plus_one_minus_two
85257718be8SEnji Cooperplus_one_minus_two_head()
85357718be8SEnji Cooper{
85457718be8SEnji Cooper	atf_set "descr" "Tests +- addressing: +1 -2 should become -k2.1,2.0"
85557718be8SEnji Cooper}
85657718be8SEnji Cooperplus_one_minus_two_body()
85757718be8SEnji Cooper{
85857718be8SEnji Cooper	cat >in <<EOF
85957718be8SEnji Cooperz b m f
86057718be8SEnji Coopery c o e
86157718be8SEnji Cooperx a n h
86257718be8SEnji Cooperx a n g
86357718be8SEnji CooperEOF
86457718be8SEnji Cooper
86557718be8SEnji Cooper	cat >expout <<EOF
86657718be8SEnji Cooperx a n h
86757718be8SEnji Cooperx a n g
86857718be8SEnji Cooperz b m f
86957718be8SEnji Coopery c o e
87057718be8SEnji CooperEOF
87157718be8SEnji Cooper
872*f9e565abSCyril Zhang	atf_check -o file:expout sort -s +1 -2 in
87357718be8SEnji Cooper}
87457718be8SEnji Cooper
87557718be8SEnji Cooperatf_test_case plus_zero
87657718be8SEnji Cooperplus_zero_head()
87757718be8SEnji Cooper{
87857718be8SEnji Cooper	atf_set "descr" "Tests +- addressing: '-- +0' raised a '-k1.1: No" \
87957718be8SEnji Cooper	    "such file or directory' error"
88057718be8SEnji Cooper}
88157718be8SEnji Cooperplus_zero_body()
88257718be8SEnji Cooper{
88357718be8SEnji Cooper	echo 'good contents' >./+0
88457718be8SEnji Cooper
88557718be8SEnji Cooper	atf_check -o file:+0 sort -- +0
88657718be8SEnji Cooper}
88757718be8SEnji Cooper
88857718be8SEnji Cooperatf_test_case plus_nonmonotone
88957718be8SEnji Cooperplus_nonmonotone_head()
89057718be8SEnji Cooper{
89157718be8SEnji Cooper	atf_set "descr" "Tests += addressing: apparently nonmonotone field" \
89257718be8SEnji Cooper	    "specs"
89357718be8SEnji Cooper}
89457718be8SEnji Cooperplus_nonmonotone_body()
89557718be8SEnji Cooper{
89657718be8SEnji Cooper	cat >in <<EOF
89757718be8SEnji Cooperaaaa c
89857718be8SEnji Cooperx a
89957718be8SEnji Cooper0 b
90057718be8SEnji CooperEOF
90157718be8SEnji Cooper
90257718be8SEnji Cooper	atf_check -o file:in sort +1 -0.3 +1.4 -1.5 in
90357718be8SEnji Cooper}
90457718be8SEnji Cooper
90557718be8SEnji Cooperatf_test_case plus_as_path
90657718be8SEnji Cooperplus_as_path_head()
90757718be8SEnji Cooper{
90857718be8SEnji Cooper	atf_set "descr" "Tests +- addressing: 'file +0' raised a '-k1.1: No" \
90957718be8SEnji Cooper	    "such file or directory' error"
91057718be8SEnji Cooper}
91157718be8SEnji Cooperplus_as_path_body()
91257718be8SEnji Cooper{
913*f9e565abSCyril Zhang	atf_expect_fail "Behavior differs from NetBSD"
91457718be8SEnji Cooper	echo 'good contents' >./+0
91557718be8SEnji Cooper	echo 'more contents' >in
91657718be8SEnji Cooper	cat ./+0 in >expout
91757718be8SEnji Cooper
91857718be8SEnji Cooper	atf_check -o file:expout sort in +0
91957718be8SEnji Cooper}
92057718be8SEnji Cooper
92157718be8SEnji Cooperatf_test_case plus_bad_tempfile
92257718be8SEnji Cooperplus_bad_tempfile_head()
92357718be8SEnji Cooper{
92457718be8SEnji Cooper	atf_set "descr" "Tests +- addressing: intermediate wrong behavior" \
92557718be8SEnji Cooper	    "that raised a '+0: No such file or directory' error"
92657718be8SEnji Cooper}
92757718be8SEnji Cooperplus_bad_tempfile_body()
92857718be8SEnji Cooper{
92957718be8SEnji Cooper	echo 'good contents' >in
93057718be8SEnji Cooper	atf_check -o file:in sort -T /tmp +0 in
93157718be8SEnji Cooper}
93257718be8SEnji Cooper
93357718be8SEnji Cooperatf_test_case plus_rflag_invalid
93457718be8SEnji Cooperplus_rflag_invalid_head()
93557718be8SEnji Cooper{
93657718be8SEnji Cooper	atf_set "descr" "Tests +- addressing: invalid record delimiter"
93757718be8SEnji Cooper}
93857718be8SEnji Cooperplus_rflag_invalid_body()
93957718be8SEnji Cooper{
940*f9e565abSCyril Zhang	atf_expect_fail "-R flag not available on FreeBSD"
941*f9e565abSCyril Zhang
94257718be8SEnji Cooper	(
94357718be8SEnji Cooper	    echo 'z b m f'
94457718be8SEnji Cooper	    echo 'y c o e'
94557718be8SEnji Cooper	    echo 'x a n h'
94657718be8SEnji Cooper	    echo 'x a n g'
94757718be8SEnji Cooper	) | tr '\n' '+' >in
94857718be8SEnji Cooper
94957718be8SEnji Cooper	atf_check -o inline:'x a n g+x a n h+z b m f+y c o e+' \
95057718be8SEnji Cooper	    sort -R + -k2 in
95157718be8SEnji Cooper}
95257718be8SEnji Cooper
95357718be8SEnji Cooperatf_test_case plus_tflag
95457718be8SEnji Cooperplus_tflag_head()
95557718be8SEnji Cooper{
95657718be8SEnji Cooper	atf_set "descr" "Tests +- addressing: using -T caused a 'No such file" \
95757718be8SEnji Cooper	    "or directory' error"
95857718be8SEnji Cooper}
95957718be8SEnji Cooperplus_tflag_body()
96057718be8SEnji Cooper{
96157718be8SEnji Cooper	mkdir ./+
96257718be8SEnji Cooper	yes | sed 200000q | sort -T + >/dev/null || atf_fail "program failed"
96357718be8SEnji Cooper}
96457718be8SEnji Cooper
96557718be8SEnji Cooperatf_test_case plus_no_end
96657718be8SEnji Cooperplus_no_end_head()
96757718be8SEnji Cooper{
96857718be8SEnji Cooper	atf_set "descr" "Tests +- addressing: field without end"
96957718be8SEnji Cooper}
97057718be8SEnji Cooperplus_no_end_body()
97157718be8SEnji Cooper{
97257718be8SEnji Cooper	cat >in <<EOF
97357718be8SEnji Coopera-B
97457718be8SEnji Coopera+b
97557718be8SEnji Coopera b
97657718be8SEnji CooperA+b
97757718be8SEnji Coopera	b
97857718be8SEnji CooperEOF
97957718be8SEnji Cooper
98057718be8SEnji Cooper	cat >out <<EOF
98157718be8SEnji Coopera	b
98257718be8SEnji Coopera b
98357718be8SEnji CooperA+b
98457718be8SEnji Coopera-B
98557718be8SEnji Coopera+b
98657718be8SEnji CooperEOF
98757718be8SEnji Cooper
98857718be8SEnji Cooper	atf_check -o file:out sort -df +0 +0d in
98957718be8SEnji Cooper}
99057718be8SEnji Cooper
99157718be8SEnji Cooperatf_init_test_cases()
99257718be8SEnji Cooper{
99357718be8SEnji Cooper	atf_add_test_case basic
99457718be8SEnji Cooper	atf_add_test_case empty_file
99557718be8SEnji Cooper	atf_add_test_case end_of_options
99657718be8SEnji Cooper	atf_add_test_case missing_newline
99757718be8SEnji Cooper	atf_add_test_case null_bytes
99857718be8SEnji Cooper	atf_add_test_case long_records
99957718be8SEnji Cooper	atf_add_test_case long_file
100057718be8SEnji Cooper	atf_add_test_case any_char
100157718be8SEnji Cooper	atf_add_test_case bflag
100257718be8SEnji Cooper	atf_add_test_case cflag
100357718be8SEnji Cooper	atf_add_test_case kflag_one_field
100457718be8SEnji Cooper	atf_add_test_case kflag_two_fields
100557718be8SEnji Cooper	atf_add_test_case kflag_many_fields
100657718be8SEnji Cooper	atf_add_test_case kflag_outofbounds
100757718be8SEnji Cooper	atf_add_test_case kflag_nonmonotone
100857718be8SEnji Cooper	atf_add_test_case kflag_limits
100957718be8SEnji Cooper	atf_add_test_case kflag_alpha
101057718be8SEnji Cooper	atf_add_test_case kflag_no_end
101157718be8SEnji Cooper	atf_add_test_case mflag
101257718be8SEnji Cooper	atf_add_test_case mflag_uflag
101357718be8SEnji Cooper	atf_add_test_case mflag_uflag_first
101457718be8SEnji Cooper	atf_add_test_case nflag
101557718be8SEnji Cooper	atf_add_test_case nflag_rflag
101657718be8SEnji Cooper	atf_add_test_case oflag
101757718be8SEnji Cooper	atf_add_test_case oflag_displaced
101857718be8SEnji Cooper	atf_add_test_case rflag
101957718be8SEnji Cooper	atf_add_test_case sflag
102057718be8SEnji Cooper	atf_add_test_case sflag_many_files
102157718be8SEnji Cooper	atf_add_test_case tflag
102257718be8SEnji Cooper	atf_add_test_case tflag_alphabetic
102357718be8SEnji Cooper	atf_add_test_case tflag_char_pos
102457718be8SEnji Cooper	atf_add_test_case tflag_whitespace
102557718be8SEnji Cooper	atf_add_test_case uflag
102657718be8SEnji Cooper	atf_add_test_case uflag_rflag
102757718be8SEnji Cooper	atf_add_test_case plus_one
102857718be8SEnji Cooper	atf_add_test_case plus_one_minus_two
102957718be8SEnji Cooper	atf_add_test_case plus_zero
103057718be8SEnji Cooper	atf_add_test_case plus_nonmonotone
103157718be8SEnji Cooper	atf_add_test_case plus_as_path
103257718be8SEnji Cooper	atf_add_test_case plus_bad_tempfile
103357718be8SEnji Cooper	atf_add_test_case plus_rflag_invalid
103457718be8SEnji Cooper	atf_add_test_case plus_tflag
103557718be8SEnji Cooper	atf_add_test_case plus_no_end
103657718be8SEnji Cooper}
1037