#!/bin/sh

# SUSv3 compliant sort tests.
# Copyright 2005 by Rob Landley <rob@landley.net>
# Licensed under GPLv2, see file LICENSE in this source tree.

. ./testing.sh

# The basic tests.  These should work even with the small busybox.

testing "sort" "sort input" "a\nb\nc\n" "c\na\nb\n" ""
testing "sort #2" "sort input" "010\n1\n3\n" "3\n1\n010\n" ""
testing "sort stdin" "sort" "a\nb\nc\n" "" "b\na\nc\n"
testing "sort numeric" "sort -n input" "1\n3\n010\n" "3\n1\n010\n" ""
testing "sort reverse" "sort -r input" "wook\nwalrus\npoint\npabst\naargh\n" \
	"point\nwook\npabst\naargh\nwalrus\n" ""

# These tests require the full option set.

optional FEATURE_SORT_BIG
# Longish chunk of data re-used by the next few tests

data="42	1	3	woot
42	1	010	zoology
egg	1	2	papyrus
7	3	42	soup
999	3	0	algebra
"

# testing "description" "command(s)" "result" "infile" "stdin"

# Sorting with keys

testing "sort one key" "sort -k4,4 input" \
"999	3	0	algebra
egg	1	2	papyrus
7	3	42	soup
42	1	3	woot
42	1	010	zoology
" "$data" ""

testing "sort key range with numeric option" "sort -k2,3n input" \
"42	1	010	zoology
42	1	3	woot
egg	1	2	papyrus
7	3	42	soup
999	3	0	algebra
" "$data" ""

test x"$SKIP_KNOWN_BUGS" = x"" && {
# Busybox is definitely doing these wrong.  FIXME
testing "sort key range with numeric option and global reverse" \
"sort -k2,3n -r input" \
"egg	1	2	papyrus
42	1	3	woot
42	1	010	zoology
999	3	0	algebra
7	3	42	soup
" "$data" ""

testing "sort key range with multiple options" "sort -k2,3rn input" \
"7	3	42	soup
999	3	0	algebra
42	1	010	zoology
42	1	3	woot
egg	1	2	papyrus
" "$data" ""
}

testing "sort key range with two -k options" "sort -k 2,2n -k 1,1r input" "\
d 2
b 2
c 3
" "\
c 3
b 2
d 2
" ""

testing "sort with non-default leading delim 1" "sort -n -k2 -t/ input" "\
/a/2
/b/1
" "\
/a/2
/b/1
" ""

testing "sort with non-default leading delim 2" "sort -n -k3 -t/ input" "\
/b/1
/a/2
" "\
/b/1
/a/2
" ""

testing "sort with non-default leading delim 3" "sort -n -k3 -t/ input" "\
//a/2
//b/1
" "\
//a/2
//b/1
" ""

testing "sort -u should consider field only when discarding" "sort -u -k2 input" "\
a c
" "\
a c
b c
" ""

testing "sort -z outputs NUL terminated lines" "sort -z input" "\
one\0three\0two\0\
" "\
one\0two\0three\0\
" ""

testing "sort key doesn't strip leading blanks, disables fallback global sort" \
"sort -n -k2 -t ' '" " a \n 1 \n 2 \n" "" " 2 \n 1 \n a \n"

testing "sort file in place" \
"sort -o input input && cat input" "\
111
222
" "\
222
111
" ""

# testing "description" "command(s)" "result" "infile" "stdin"

exit $FAILCOUNT
