1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-03-04 12:05:23 +02:00
Files
coreutils/tests/misc/sort-debug-keys
Paul Eggert a2cebacf97 sort: fix bug in --debug when \0 is followed by \t
* src/sort.c (debug_width): New function, which does not stop
counting tabs at \0, and also invokes mbsnwidth.  Stamp out strnlen!
(count_tabs): Remove.
(debug_key): Use debug_width instead of mbsnwidth and count_tabs.
* tests/misc/sort-debug-keys: Check that \0 and \t intermix.
2010-08-03 10:25:47 -07:00

323 lines
4.4 KiB
Bash
Executable File

#!/bin/sh
# Test annotation of sort keys
# Copyright (C) 2010 Free Software Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
if test "$VERBOSE" = yes; then
set -x
sort --version
fi
. $srcdir/test-lib.sh
number() { cat -n | sed 's/^ *//'; }
cat <<\EOF > exp
1
^ no match for key
^ no match for key
44
^ no match for key
33
^ no match for key
2
^ no match for key
1
^ no match for key
^ no match for key
44
^ no match for key
33
^ no match for key
2
^ no match for key
^ no match for key
1
_
2
_
33
__
44
__
2>
^ no match for key
3>1
_
1>2
_
1
^ no match for key
^ no match for key
44
^ no match for key
33
^ no match for key
2
^ no match for key
1
^ no match for key
^ no match for key
44
^ no match for key
33
^ no match for key
2
^ no match for key
^ no match for key
1
_
2
_
33
__
44
__
2>
^ no match for key
3>1
_
1>2
_
1
^ no match for key
^ no match for key
44
^ no match for key
33
^ no match for key
2
^ no match for key
1
^ no match for key
^ no match for key
44
^ no match for key
33
^ no match for key
2
^ no match for key
^ no match for key
1
_
2
_
33
__
44
__
2>
^ no match for key
3>1
_
1>2
_
^ no match for key
JAN
___
FEB
___
FEB
^ no match for key
^ no match for key
JAN
^ no match for key
JAZZ
^ no match for key
^ no match for key
JAN
___
FEB
___
2>JAZZ
^ no match for key
3>
^ no match for key
4>JAN
___
1>FEB
___
^ no match for key
JANZ
___
JAN
___
FEB
___
3>
^ no match for key
2>JANZ
___
4>JAN
___
1>FEB
___
1.2ignore
___
1.1e4ignore
_____
>>a
___
>b
__
a
^ no match for key
^ no match for key
a
_
b
_
-3
__
-2
__
-0
__
--Mi-1
_
-0
__
1
_
1
_
__
1
_
_
1
_
1
_
1
__
1
_
2,5
_
2.4
___
2.,,3
__
2.4
___
2,,3
_
2.4
___
1a
_
2b
_
>a
_
EOF
(
for type in n h g; do
printf "1\n\n44\n33\n2\n" | sort -s -k2$type --debug
printf "1\n\n44\n33\n2\n" | sort -s -k1.3$type --debug
printf "1\n\n44\n33\n2\n" | sort -s -k1$type --debug
printf "2\n\n1\n" | number | sort -s -k2g --debug
done
printf "FEB\n\nJAN\n" | sort -s -k1M --debug
printf "FEB\n\nJAN\n" | sort -s -k2,2M --debug
printf "FEB\nJAZZ\n\nJAN\n" | sort -s -k1M --debug
printf "FEB\nJAZZ\n\nJAN\n" | number | sort -s -k2,2M --debug
printf "FEB\nJANZ\n\nJAN\n" | sort -s -k1M --debug
printf "FEB\nJANZ\n\nJAN\n" | number | sort -s -k2,2M --debug
printf " 1.2ignore\n 1.1e4ignore\n" | sort -s -g --debug
printf "\tb\n\t\ta\n" | sort -s -d --debug # ignore = 1
printf "a\n\n" | sort -s -k2,2 --debug #lena = 0
printf "b\na\n" | sort -s -k1 --debug #otherwise key compare
printf -- "-0\n1\n-2\n--Mi-1\n-3\n-0\n" | sort -s --debug -k1,1h
printf " 1\n1\n" | sort -b --debug
printf " 1\n1\n" | sort -sb --debug
printf " 1\n1\n" | sort --debug
# strnumcmp is a bit weird, so we don't match exactly
printf "2,5\n2.4\n" | sort -s -k1n --debug
printf "2.,,3\n2.4\n" | sort -s -k1n --debug
printf "2,,3\n2.4\n" | sort -s -k1n --debug
# -z means we convert \0 to \n
printf "1a\x002b\x00" | sort -s -n -z --debug
# Check that \0 and \t intermix.
printf "\0\ta\n" | sort -s -k2b,2 --debug | tr -d '\0'
) > out
compare out exp || fail=1
cat <<\EOF > exp
1²---++3 1,234 Mi
_
_________
________________________
1²---++3 1,234 Mi
_____
________
_______________________
+1234 1234Gi 1,234M
^ no match for key
_____
^ no match for key
____
____
_____
_____
_____
______
___________________
EOF
: ${LOCALE_FR_UTF8=none}
if test "$LOCALE_FR_UTF8" != "none"; then
(
echo " 1²---++3 1,234 Mi" |
LC_ALL=C sort --debug -k2g -k1b,1
echo " 1²---++3 1,234 Mi" |
LC_ALL=$LOCALE_FR_UTF8 sort --debug -k2g -k1b,1
echo "+1234 1234Gi 1,234M" |
LC_ALL=$LOCALE_FR_UTF8 sort --debug -k1,1n -k1,1g \
-k1,1h -k2,2n -k2,2g -k2,2h -k3,3n -k3,3g -k3,3h
) > out
compare out exp || fail=1
fi
Exit $fail