]> git.ipfire.org Git - thirdparty/bash.git/blob - tests/ifs-posix.tests
Bash-4.3 patch 7
[thirdparty/bash.git] / tests / ifs-posix.tests
1 # Usage: $SHELL ifs.sh
2 #
3 # This script generates 6856 tests for the set(1) and read(1)
4 # builtins w.r.t. IFS whitespace and non-whitespace characters.
5 # Each failed test produces one line on the standard output that
6 # contains the test along with the expected and actual results.
7 # The last output line contains the test result counts. ordered>0
8 # are the number of tests where IFS=": " produced different results
9 # than IFS=" :". If a test fails the same way for IFS=": " and
10 # IFS=" :" then the second output line is suppressed.
11
12 TESTS=6856
13
14 ksh_read=0
15 echo 1 | read ksh_read
16 ksh_arith=0
17 eval '((ksh_arith+=1))' 2>/dev/null
18
19 failed=0
20 ordered=0
21 passed=0
22
23 split()
24 {
25 i=$1 s=$2 r=$3 S='' R=''
26 for ifs in ': ' ' :'
27 do IFS=$ifs
28 set x $i
29 shift
30 IFS=' '
31 g="[$#]"
32 while :
33 do case $# in
34 0) break ;;
35 esac
36 g="$g($1)"
37 shift
38 done
39 case $g in
40 "$s") case $ksh_arith in
41 1) ((passed+=1)) ;;
42 *) passed=`expr $passed + 1` ;;
43 esac
44 case $S in
45 '') S=$g
46 ;;
47 "$g") ;;
48 *) case $ksh_arith in
49 1) ((ordered+=1)) ;;
50 *) ordered=`expr $ordered + 1` ;;
51 esac
52 ;;
53 esac
54 ;;
55 "$S") case $ksh_arith in
56 1) ((failed+=1)) ;;
57 *) failed=`expr $failed + 1` ;;
58 esac
59 ;;
60 *) case $ksh_arith in
61 1) ((failed+=1)) ;;
62 *) failed=`expr $failed + 1` ;;
63 esac
64 case $s in
65 "$S") ;;
66 ?0*) echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#]\" # expected \"$s\" got \"$g\"" ;;
67 ?1*) echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#](\$1)\" # expected \"$s\" got \"$g\"" ;;
68 ?2*) echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#](\$1)(\$2)\" # expected \"$s\" got \"$g\"" ;;
69 ?3*) echo "IFS=\"$ifs\"; x=\"$i\"; set x \$x; shift; echo \"[\$#](\$1)(\$2)(\$3)\" # expected \"$s\" got \"$g\"" ;;
70 *) echo TEST ERROR i="'$i'" s="'$s'" ;;
71 esac
72 case $S in
73 '') S=$g
74 ;;
75 "$g") ;;
76 *) case $ksh_arith in
77 1) ((ordered+=1)) ;;
78 *) ordered=`expr $ordered + 1` ;;
79 esac
80 ;;
81 esac
82 esac
83 case $ksh_read in
84 1) echo "$i" | IFS=$ifs read x y; g="($x)($y)" ;;
85 *) g=`export ifs; echo "$i" | ( IFS=$ifs; read x y; echo "($x)($y)" )` ;;
86 esac
87 case $g in
88 "$r") case $ksh_arith in
89 1) ((passed+=1)) ;;
90 *) passed=`expr $passed + 1` ;;
91 esac
92 case $R in
93 '') R=$g
94 ;;
95 "$g") ;;
96 *) case $ksh_arith in
97 1) ((ordered+=1)) ;;
98 *) ordered=`expr $ordered + 1` ;;
99 esac
100 ;;
101 esac
102 ;;
103 "$R") case $ksh_arith in
104 1) ((failed+=1)) ;;
105 *) failed=`expr $failed + 1` ;;
106 esac
107 ;;
108 *) case $ksh_arith in
109 1) ((failed+=1)) ;;
110 *) failed=`expr $failed + 1` ;;
111 esac
112 case $r in
113 "$R") ;;
114 *) echo "echo \"$i\" | ( IFS=\"$ifs\" read x y; echo \"(\$x)(\$y)\" ) # expected \"$r\" got \"$g\"" ;;
115 esac
116 case $R in
117 '') R=$g
118 ;;
119 "$g") ;;
120 *) case $ksh_arith in
121 1) ((ordered+=1)) ;;
122 *) ordered=`expr $ordered + 1` ;;
123 esac
124 ;;
125 esac
126 ;;
127 esac
128 done
129 }
130
131 for str in \
132 '-' \
133 'a' \
134 '- -' \
135 '- a' \
136 'a -' \
137 'a b' \
138 '- - -' \
139 '- - a' \
140 '- a -' \
141 '- a b' \
142 'a - -' \
143 'a - b' \
144 'a b -' \
145 'a b c' \
146
147 do
148 IFS=' '
149 set x $str
150
151 shift
152 case $# in
153 0) continue ;;
154 esac
155
156 f1=$1
157 case $f1 in
158 '-') f1='' ;;
159 esac
160
161 shift
162 case $# in
163 0) for d0 in '' ' '
164 do
165 for d1 in '' ' ' ':' ' :' ': ' ' : '
166 do
167 case $f1$d1 in
168 '') split "$d0$f1$d1" "[0]" "()()" ;;
169 ' ') ;;
170 *) split "$d0$f1$d1" "[1]($f1)" "($f1)()" ;;
171 esac
172 done
173 done
174 continue
175 ;;
176 esac
177 f2=$1
178 case $f2 in
179 '-') f2='' ;;
180 esac
181
182 shift
183 case $# in
184 0) for d0 in '' ' '
185 do
186 for d1 in ' ' ':' ' :' ': ' ' : '
187 do
188 case ' ' in
189 $f1$d1|$d1$f2) continue ;;
190 esac
191 for d2 in '' ' ' ':' ' :' ': ' ' : '
192 do
193 case $f2$d2 in
194 '') split "$d0$f1$d1$f2$d2" "[1]($f1)" "($f1)()" ;;
195 ' ') ;;
196 *) split "$d0$f1$d1$f2$d2" "[2]($f1)($f2)" "($f1)($f2)" ;;
197 esac
198 done
199 done
200 done
201 continue
202 ;;
203 esac
204 f3=$1
205 case $f3 in
206 '-') f3='' ;;
207 esac
208
209 shift
210 case $# in
211 0) for d0 in '' ' '
212 do
213 for d1 in ':' ' :' ': ' ' : '
214 do
215 case ' ' in
216 $f1$d1|$d1$f2) continue ;;
217 esac
218 for d2 in ' ' ':' ' :' ': ' ' : '
219 do
220 case $f2$d2 in
221 ' ') continue ;;
222 esac
223 case ' ' in
224 $f2$d2|$d2$f3) continue ;;
225 esac
226 for d3 in '' ' ' ':' ' :' ': ' ' : '
227 do
228 case $f3$d3 in
229 '') split "$d0$f1$d1$f2$d2$f3$d3" "[2]($f1)($f2)" "($f1)($f2)" ;;
230 ' ') ;;
231 *) x=$f2$d2$f3$d3
232 x=${x#' '}
233 x=${x%' '}
234 split "$d0$f1$d1$f2$d2$f3$d3" "[3]($f1)($f2)($f3)" "($f1)($x)"
235 ;;
236 esac
237 done
238 done
239 done
240 done
241 continue
242 ;;
243 esac
244 done
245 case $ksh_arith in
246 1) ((tests=passed+failed)) ;;
247 *) tests=`expr $passed + $failed` ;;
248 esac
249 case $ordered in
250 0) ordered="" ;;
251 *) ordered=" ordered $ordered" ;;
252 esac
253 case $tests in
254 $TESTS) fatal="" ;;
255 *) fatal=" -- fundamental IFS error -- $TESTS tests expected"
256 esac
257 echo "# tests $tests passed $passed failed $failed$ordered$fatal"