shell: add 6856 $IFS tests to testsuites
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
f693b606b7
commit
46158dc833
1
shell/ash_test/ash-z_slow/many_ifs.right
Normal file
1
shell/ash_test/ash-z_slow/many_ifs.right
Normal file
@ -0,0 +1 @@
|
|||||||
|
# tests 6856 passed 6856 failed 0
|
257
shell/ash_test/ash-z_slow/many_ifs.tests
Executable file
257
shell/ash_test/ash-z_slow/many_ifs.tests
Executable file
@ -0,0 +1,257 @@
|
|||||||
|
# Usage: $SHELL ifs.sh
|
||||||
|
#
|
||||||
|
# This script generates 6856 tests for the set(1) and read(1)
|
||||||
|
# builtins w.r.t. IFS whitespace and non-whitespace characters.
|
||||||
|
# Each failed test produces one line on the standard output that
|
||||||
|
# contains the test along with the expected and actual results.
|
||||||
|
# The last output line contains the test result counts. ordered>0
|
||||||
|
# are the number of tests where IFS=": " produced different results
|
||||||
|
# than IFS=" :". If a test fails the same way for IFS=": " and
|
||||||
|
# IFS=" :" then the second output line is suppressed.
|
||||||
|
|
||||||
|
TESTS=6856
|
||||||
|
|
||||||
|
ksh_read=0
|
||||||
|
echo 1 | read ksh_read
|
||||||
|
ksh_arith=0
|
||||||
|
eval '((ksh_arith+=1))' 2>/dev/null
|
||||||
|
|
||||||
|
failed=0
|
||||||
|
ordered=0
|
||||||
|
passed=0
|
||||||
|
|
||||||
|
split()
|
||||||
|
{
|
||||||
|
i=$1 s=$2 r=$3 S='' R=''
|
||||||
|
for ifs in ': ' ' :'
|
||||||
|
do IFS=$ifs
|
||||||
|
set x $i
|
||||||
|
shift
|
||||||
|
IFS=' '
|
||||||
|
g="[$#]"
|
||||||
|
while :
|
||||||
|
do case $# in
|
||||||
|
0) break ;;
|
||||||
|
esac
|
||||||
|
g="$g($1)"
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
case $g in
|
||||||
|
"$s") case $ksh_arith in
|
||||||
|
1) ((passed+=1)) ;;
|
||||||
|
*) passed=`expr $passed + 1` ;;
|
||||||
|
esac
|
||||||
|
case $S in
|
||||||
|
'') S=$g
|
||||||
|
;;
|
||||||
|
"$g") ;;
|
||||||
|
*) case $ksh_arith in
|
||||||
|
1) ((ordered+=1)) ;;
|
||||||
|
*) ordered=`expr $ordered + 1` ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
"$S") case $ksh_arith in
|
||||||
|
1) ((failed+=1)) ;;
|
||||||
|
*) failed=`expr $failed + 1` ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*) case $ksh_arith in
|
||||||
|
1) ((failed+=1)) ;;
|
||||||
|
*) failed=`expr $failed + 1` ;;
|
||||||
|
esac
|
||||||
|
case $s in
|
||||||
|
"$S") ;;
|
||||||
|
?0*) echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#]\" # expected \"$s\" got \"$g\"" ;;
|
||||||
|
?1*) echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#](\$1)\" # expected \"$s\" got \"$g\"" ;;
|
||||||
|
?2*) echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#](\$1)(\$2)\" # expected \"$s\" got \"$g\"" ;;
|
||||||
|
?3*) echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#](\$1)(\$2)(\$3)\" # expected \"$s\" got \"$g\"" ;;
|
||||||
|
*) echo TEST ERROR i="'$i'" s="'$s'" ;;
|
||||||
|
esac
|
||||||
|
case $S in
|
||||||
|
'') S=$g
|
||||||
|
;;
|
||||||
|
"$g") ;;
|
||||||
|
*) case $ksh_arith in
|
||||||
|
1) ((ordered+=1)) ;;
|
||||||
|
*) ordered=`expr $ordered + 1` ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
esac
|
||||||
|
case $ksh_read in
|
||||||
|
1) echo "$i" | IFS=$ifs read x y; g="($x)($y)" ;;
|
||||||
|
*) g=`export ifs; echo "$i" | ( IFS=$ifs; read x y; echo "($x)($y)" )` ;;
|
||||||
|
esac
|
||||||
|
case $g in
|
||||||
|
"$r") case $ksh_arith in
|
||||||
|
1) ((passed+=1)) ;;
|
||||||
|
*) passed=`expr $passed + 1` ;;
|
||||||
|
esac
|
||||||
|
case $R in
|
||||||
|
'') R=$g
|
||||||
|
;;
|
||||||
|
"$g") ;;
|
||||||
|
*) case $ksh_arith in
|
||||||
|
1) ((ordered+=1)) ;;
|
||||||
|
*) ordered=`expr $ordered + 1` ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
"$R") case $ksh_arith in
|
||||||
|
1) ((failed+=1)) ;;
|
||||||
|
*) failed=`expr $failed + 1` ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*) case $ksh_arith in
|
||||||
|
1) ((failed+=1)) ;;
|
||||||
|
*) failed=`expr $failed + 1` ;;
|
||||||
|
esac
|
||||||
|
case $r in
|
||||||
|
"$R") ;;
|
||||||
|
*) echo "echo \"$i\" | ( IFS=\"$ifs\" read x y; echo \"(\$x)(\$y)\" ) # expected \"$r\" got \"$g\"" ;;
|
||||||
|
esac
|
||||||
|
case $R in
|
||||||
|
'') R=$g
|
||||||
|
;;
|
||||||
|
"$g") ;;
|
||||||
|
*) case $ksh_arith in
|
||||||
|
1) ((ordered+=1)) ;;
|
||||||
|
*) ordered=`expr $ordered + 1` ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
for str in \
|
||||||
|
'-' \
|
||||||
|
'a' \
|
||||||
|
'- -' \
|
||||||
|
'- a' \
|
||||||
|
'a -' \
|
||||||
|
'a b' \
|
||||||
|
'- - -' \
|
||||||
|
'- - a' \
|
||||||
|
'- a -' \
|
||||||
|
'- a b' \
|
||||||
|
'a - -' \
|
||||||
|
'a - b' \
|
||||||
|
'a b -' \
|
||||||
|
'a b c' \
|
||||||
|
|
||||||
|
do
|
||||||
|
IFS=' '
|
||||||
|
set x $str
|
||||||
|
|
||||||
|
shift
|
||||||
|
case $# in
|
||||||
|
0) continue ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
f1=$1
|
||||||
|
case $f1 in
|
||||||
|
'-') f1='' ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
case $# in
|
||||||
|
0) for d0 in '' ' '
|
||||||
|
do
|
||||||
|
for d1 in '' ' ' ':' ' :' ': ' ' : '
|
||||||
|
do
|
||||||
|
case $f1$d1 in
|
||||||
|
'') split "$d0$f1$d1" "[0]" "()()" ;;
|
||||||
|
' ') ;;
|
||||||
|
*) split "$d0$f1$d1" "[1]($f1)" "($f1)()" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
done
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
f2=$1
|
||||||
|
case $f2 in
|
||||||
|
'-') f2='' ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
case $# in
|
||||||
|
0) for d0 in '' ' '
|
||||||
|
do
|
||||||
|
for d1 in ' ' ':' ' :' ': ' ' : '
|
||||||
|
do
|
||||||
|
case ' ' in
|
||||||
|
$f1$d1|$d1$f2) continue ;;
|
||||||
|
esac
|
||||||
|
for d2 in '' ' ' ':' ' :' ': ' ' : '
|
||||||
|
do
|
||||||
|
case $f2$d2 in
|
||||||
|
'') split "$d0$f1$d1$f2$d2" "[1]($f1)" "($f1)()" ;;
|
||||||
|
' ') ;;
|
||||||
|
*) split "$d0$f1$d1$f2$d2" "[2]($f1)($f2)" "($f1)($f2)" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
f3=$1
|
||||||
|
case $f3 in
|
||||||
|
'-') f3='' ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
case $# in
|
||||||
|
0) for d0 in '' ' '
|
||||||
|
do
|
||||||
|
for d1 in ':' ' :' ': ' ' : '
|
||||||
|
do
|
||||||
|
case ' ' in
|
||||||
|
$f1$d1|$d1$f2) continue ;;
|
||||||
|
esac
|
||||||
|
for d2 in ' ' ':' ' :' ': ' ' : '
|
||||||
|
do
|
||||||
|
case $f2$d2 in
|
||||||
|
' ') continue ;;
|
||||||
|
esac
|
||||||
|
case ' ' in
|
||||||
|
$f2$d2|$d2$f3) continue ;;
|
||||||
|
esac
|
||||||
|
for d3 in '' ' ' ':' ' :' ': ' ' : '
|
||||||
|
do
|
||||||
|
case $f3$d3 in
|
||||||
|
'') split "$d0$f1$d1$f2$d2$f3$d3" "[2]($f1)($f2)" "($f1)($f2)" ;;
|
||||||
|
' ') ;;
|
||||||
|
*) x=$f2$d2$f3$d3
|
||||||
|
x=${x# } #was x=${x#' '} hush needs fixing for this to work
|
||||||
|
x=${x% } #was x=${x%' '}
|
||||||
|
split "$d0$f1$d1$f2$d2$f3$d3" "[3]($f1)($f2)($f3)" "($f1)($x)"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
case $ksh_arith in
|
||||||
|
1) ((tests=passed+failed)) ;;
|
||||||
|
*) tests=`expr $passed + $failed` ;;
|
||||||
|
esac
|
||||||
|
case $ordered in
|
||||||
|
0) ordered="" ;;
|
||||||
|
*) ordered=" ordered $ordered" ;;
|
||||||
|
esac
|
||||||
|
case $tests in
|
||||||
|
$TESTS) fatal="" ;;
|
||||||
|
*) fatal=" -- fundamental IFS error -- $TESTS tests expected"
|
||||||
|
esac
|
||||||
|
echo "# tests $tests passed $passed failed $failed$ordered$fatal"
|
1
shell/hush_test/hush-z_slow/many_ifs.right
Normal file
1
shell/hush_test/hush-z_slow/many_ifs.right
Normal file
@ -0,0 +1 @@
|
|||||||
|
# tests 6856 passed 6856 failed 0
|
257
shell/hush_test/hush-z_slow/many_ifs.tests
Executable file
257
shell/hush_test/hush-z_slow/many_ifs.tests
Executable file
@ -0,0 +1,257 @@
|
|||||||
|
# Usage: $SHELL ifs.sh
|
||||||
|
#
|
||||||
|
# This script generates 6856 tests for the set(1) and read(1)
|
||||||
|
# builtins w.r.t. IFS whitespace and non-whitespace characters.
|
||||||
|
# Each failed test produces one line on the standard output that
|
||||||
|
# contains the test along with the expected and actual results.
|
||||||
|
# The last output line contains the test result counts. ordered>0
|
||||||
|
# are the number of tests where IFS=": " produced different results
|
||||||
|
# than IFS=" :". If a test fails the same way for IFS=": " and
|
||||||
|
# IFS=" :" then the second output line is suppressed.
|
||||||
|
|
||||||
|
TESTS=6856
|
||||||
|
|
||||||
|
ksh_read=0
|
||||||
|
echo 1 | read ksh_read
|
||||||
|
ksh_arith=0
|
||||||
|
eval '((ksh_arith+=1))' 2>/dev/null
|
||||||
|
|
||||||
|
failed=0
|
||||||
|
ordered=0
|
||||||
|
passed=0
|
||||||
|
|
||||||
|
split()
|
||||||
|
{
|
||||||
|
i=$1 s=$2 r=$3 S='' R=''
|
||||||
|
for ifs in ': ' ' :'
|
||||||
|
do IFS=$ifs
|
||||||
|
set x $i
|
||||||
|
shift
|
||||||
|
IFS=' '
|
||||||
|
g="[$#]"
|
||||||
|
while :
|
||||||
|
do case $# in
|
||||||
|
0) break ;;
|
||||||
|
esac
|
||||||
|
g="$g($1)"
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
case $g in
|
||||||
|
"$s") case $ksh_arith in
|
||||||
|
1) ((passed+=1)) ;;
|
||||||
|
*) passed=`expr $passed + 1` ;;
|
||||||
|
esac
|
||||||
|
case $S in
|
||||||
|
'') S=$g
|
||||||
|
;;
|
||||||
|
"$g") ;;
|
||||||
|
*) case $ksh_arith in
|
||||||
|
1) ((ordered+=1)) ;;
|
||||||
|
*) ordered=`expr $ordered + 1` ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
"$S") case $ksh_arith in
|
||||||
|
1) ((failed+=1)) ;;
|
||||||
|
*) failed=`expr $failed + 1` ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*) case $ksh_arith in
|
||||||
|
1) ((failed+=1)) ;;
|
||||||
|
*) failed=`expr $failed + 1` ;;
|
||||||
|
esac
|
||||||
|
case $s in
|
||||||
|
"$S") ;;
|
||||||
|
?0*) echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#]\" # expected \"$s\" got \"$g\"" ;;
|
||||||
|
?1*) echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#](\$1)\" # expected \"$s\" got \"$g\"" ;;
|
||||||
|
?2*) echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#](\$1)(\$2)\" # expected \"$s\" got \"$g\"" ;;
|
||||||
|
?3*) echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#](\$1)(\$2)(\$3)\" # expected \"$s\" got \"$g\"" ;;
|
||||||
|
*) echo TEST ERROR i="'$i'" s="'$s'" ;;
|
||||||
|
esac
|
||||||
|
case $S in
|
||||||
|
'') S=$g
|
||||||
|
;;
|
||||||
|
"$g") ;;
|
||||||
|
*) case $ksh_arith in
|
||||||
|
1) ((ordered+=1)) ;;
|
||||||
|
*) ordered=`expr $ordered + 1` ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
esac
|
||||||
|
case $ksh_read in
|
||||||
|
1) echo "$i" | IFS=$ifs read x y; g="($x)($y)" ;;
|
||||||
|
*) g=`export ifs; echo "$i" | ( IFS=$ifs; read x y; echo "($x)($y)" )` ;;
|
||||||
|
esac
|
||||||
|
case $g in
|
||||||
|
"$r") case $ksh_arith in
|
||||||
|
1) ((passed+=1)) ;;
|
||||||
|
*) passed=`expr $passed + 1` ;;
|
||||||
|
esac
|
||||||
|
case $R in
|
||||||
|
'') R=$g
|
||||||
|
;;
|
||||||
|
"$g") ;;
|
||||||
|
*) case $ksh_arith in
|
||||||
|
1) ((ordered+=1)) ;;
|
||||||
|
*) ordered=`expr $ordered + 1` ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
"$R") case $ksh_arith in
|
||||||
|
1) ((failed+=1)) ;;
|
||||||
|
*) failed=`expr $failed + 1` ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*) case $ksh_arith in
|
||||||
|
1) ((failed+=1)) ;;
|
||||||
|
*) failed=`expr $failed + 1` ;;
|
||||||
|
esac
|
||||||
|
case $r in
|
||||||
|
"$R") ;;
|
||||||
|
*) echo "echo \"$i\" | ( IFS=\"$ifs\" read x y; echo \"(\$x)(\$y)\" ) # expected \"$r\" got \"$g\"" ;;
|
||||||
|
esac
|
||||||
|
case $R in
|
||||||
|
'') R=$g
|
||||||
|
;;
|
||||||
|
"$g") ;;
|
||||||
|
*) case $ksh_arith in
|
||||||
|
1) ((ordered+=1)) ;;
|
||||||
|
*) ordered=`expr $ordered + 1` ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
for str in \
|
||||||
|
'-' \
|
||||||
|
'a' \
|
||||||
|
'- -' \
|
||||||
|
'- a' \
|
||||||
|
'a -' \
|
||||||
|
'a b' \
|
||||||
|
'- - -' \
|
||||||
|
'- - a' \
|
||||||
|
'- a -' \
|
||||||
|
'- a b' \
|
||||||
|
'a - -' \
|
||||||
|
'a - b' \
|
||||||
|
'a b -' \
|
||||||
|
'a b c' \
|
||||||
|
|
||||||
|
do
|
||||||
|
IFS=' '
|
||||||
|
set x $str
|
||||||
|
|
||||||
|
shift
|
||||||
|
case $# in
|
||||||
|
0) continue ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
f1=$1
|
||||||
|
case $f1 in
|
||||||
|
'-') f1='' ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
case $# in
|
||||||
|
0) for d0 in '' ' '
|
||||||
|
do
|
||||||
|
for d1 in '' ' ' ':' ' :' ': ' ' : '
|
||||||
|
do
|
||||||
|
case $f1$d1 in
|
||||||
|
'') split "$d0$f1$d1" "[0]" "()()" ;;
|
||||||
|
' ') ;;
|
||||||
|
*) split "$d0$f1$d1" "[1]($f1)" "($f1)()" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
done
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
f2=$1
|
||||||
|
case $f2 in
|
||||||
|
'-') f2='' ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
case $# in
|
||||||
|
0) for d0 in '' ' '
|
||||||
|
do
|
||||||
|
for d1 in ' ' ':' ' :' ': ' ' : '
|
||||||
|
do
|
||||||
|
case ' ' in
|
||||||
|
$f1$d1|$d1$f2) continue ;;
|
||||||
|
esac
|
||||||
|
for d2 in '' ' ' ':' ' :' ': ' ' : '
|
||||||
|
do
|
||||||
|
case $f2$d2 in
|
||||||
|
'') split "$d0$f1$d1$f2$d2" "[1]($f1)" "($f1)()" ;;
|
||||||
|
' ') ;;
|
||||||
|
*) split "$d0$f1$d1$f2$d2" "[2]($f1)($f2)" "($f1)($f2)" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
f3=$1
|
||||||
|
case $f3 in
|
||||||
|
'-') f3='' ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
case $# in
|
||||||
|
0) for d0 in '' ' '
|
||||||
|
do
|
||||||
|
for d1 in ':' ' :' ': ' ' : '
|
||||||
|
do
|
||||||
|
case ' ' in
|
||||||
|
$f1$d1|$d1$f2) continue ;;
|
||||||
|
esac
|
||||||
|
for d2 in ' ' ':' ' :' ': ' ' : '
|
||||||
|
do
|
||||||
|
case $f2$d2 in
|
||||||
|
' ') continue ;;
|
||||||
|
esac
|
||||||
|
case ' ' in
|
||||||
|
$f2$d2|$d2$f3) continue ;;
|
||||||
|
esac
|
||||||
|
for d3 in '' ' ' ':' ' :' ': ' ' : '
|
||||||
|
do
|
||||||
|
case $f3$d3 in
|
||||||
|
'') split "$d0$f1$d1$f2$d2$f3$d3" "[2]($f1)($f2)" "($f1)($f2)" ;;
|
||||||
|
' ') ;;
|
||||||
|
*) x=$f2$d2$f3$d3
|
||||||
|
x=${x# } #was x=${x#' '} hush needs fixing for this to work
|
||||||
|
x=${x% } #was x=${x%' '}
|
||||||
|
split "$d0$f1$d1$f2$d2$f3$d3" "[3]($f1)($f2)($f3)" "($f1)($x)"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
done
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
case $ksh_arith in
|
||||||
|
1) ((tests=passed+failed)) ;;
|
||||||
|
*) tests=`expr $passed + $failed` ;;
|
||||||
|
esac
|
||||||
|
case $ordered in
|
||||||
|
0) ordered="" ;;
|
||||||
|
*) ordered=" ordered $ordered" ;;
|
||||||
|
esac
|
||||||
|
case $tests in
|
||||||
|
$TESTS) fatal="" ;;
|
||||||
|
*) fatal=" -- fundamental IFS error -- $TESTS tests expected"
|
||||||
|
esac
|
||||||
|
echo "# tests $tests passed $passed failed $failed$ordered$fatal"
|
Loading…
Reference in New Issue
Block a user