/[pcre]/code/trunk/RunTest
ViewVC logotype

Contents of /code/trunk/RunTest

Parent Directory Parent Directory | Revision Log Revision Log


Revision 708 - (hide annotations) (download)
Fri Sep 23 11:03:03 2011 UTC (2 years, 10 months ago) by ph10
File size: 15420 byte(s)
File tidies for 8.20-RC2 release.

1 nigel 49 #! /bin/sh
2    
3 ph10 671 # Run the PCRE tests using the pcretest program. The appropriate tests are
4     # selected, depending on which build-time options were used.
5 nigel 49
6 ph10 671 # All tests are now run both with and without -s, to ensure that everything is
7     # tested with and without studying. However, there are some tests that produce
8     # different output after studying, typically when we are tracing the actual
9     # matching process (for example, using auto-callouts). In these few cases, the
10     # tests are duplicated in the files, one with /S to force studying always, and
11     # one with /SS to force *not* studying always. The use of -s doesn't then make
12     # any difference to their output. There is also one test which compiles invalid
13     # UTF-8 with the UTF-8 check turned off; for this, studying must also be
14     # disabled with /SS.
15    
16     # When JIT support is available, all the tests are also run with -s+ to test
17     # (again, almost) everything with studying and the JIT option. There are also
18 ph10 674 # two tests for JIT-specific features, one to be run when JIT support is
19 ph10 671 # available, and one when it is not.
20    
21 ph10 691 # The arguments for this script can be individual test numbers, or the word
22     # "valgrind", or "sim" followed by an argument to run cross-compiled
23 ph10 689 # executables under a simulator, for example:
24     #
25     # RunTest 3 sim "qemu-arm -s 8388608"
26    
27 nigel 87 valgrind=
28 ph10 689 sim=
29 ph10 339
30 ph10 116 # Select which tests to run; for those that are explicitly requested, check
31     # that the necessary optional facilities are available.
32    
33 nigel 49 do1=no
34     do2=no
35     do3=no
36     do4=no
37     do5=no
38 nigel 75 do6=no
39 nigel 77 do7=no
40     do8=no
41     do9=no
42 ph10 164 do10=no
43 ph10 448 do11=no
44     do12=no
45 ph10 651 do13=no
46 ph10 671 do14=no
47     do15=no
48 nigel 49
49     while [ $# -gt 0 ] ; do
50     case $1 in
51     1) do1=yes;;
52     2) do2=yes;;
53     3) do3=yes;;
54     4) do4=yes;;
55 nigel 77 5) do5=yes;;
56     6) do6=yes;;
57     7) do7=yes;;
58     8) do8=yes;;
59     9) do9=yes;;
60 ph10 165 10) do10=yes;;
61 ph10 448 11) do11=yes;;
62 ph10 461 12) do12=yes;;
63 ph10 666 13) do13=yes;;
64 ph10 671 14) do14=yes;;
65     15) do15=yes;;
66 ph10 666 valgrind) valgrind="valgrind -q --smc-check=all";;
67 ph10 689 sim) shift; sim=$1;;
68 nigel 49 *) echo "Unknown test number $1"; exit 1;;
69     esac
70     shift
71     done
72    
73 ph10 689 # Set up a suitable "diff" command for comparison. Some systems
74     # have a diff that lacks a -u option. Try to deal with this.
75    
76     if diff -u /dev/null /dev/null; then cf="diff -u"; else cf="diff"; fi
77    
78     # Find the test data
79    
80     if [ -n "$srcdir" -a -d "$srcdir" ] ; then
81     testdata="$srcdir/testdata"
82 ph10 706 elif [ -d "./testdata" ] ; then
83     testdata=./testdata
84     elif [ -d "../testdata" ] ; then
85     testdata=../testdata
86     else
87     echo "Cannot find the testdata directory"
88 ph10 708 exit 1
89 ph10 689 fi
90    
91     # Find which optional facilities are available
92    
93     case `$sim ./pcretest -C | $sim ./pcregrep 'Internal link size'` in
94     *2) link_size=2;;
95     *3) link_size=3;;
96     *4) link_size=4;;
97     *) echo "Failed to find internal link size"; exit 1;;
98     esac
99    
100     $sim ./pcretest -C | $sim ./pcregrep 'No UTF-8 support' >/dev/null
101     utf8=$?
102    
103     $sim ./pcretest -C | $sim ./pcregrep 'No Unicode properties support' >/dev/null
104     ucp=$?
105    
106     jitopt=
107     $sim ./pcretest -C | $sim ./pcregrep 'No just-in-time compiler support' \
108     >/dev/null
109     jit=$?
110     if [ $jit -ne 0 ] ; then
111     jitopt=-s+
112     fi
113    
114 ph10 116 if [ $utf8 -eq 0 ] ; then
115 nigel 63 if [ $do4 = yes ] ; then
116 nigel 75 echo "Can't run test 4 because UTF-8 support is not configured"
117 nigel 63 exit 1
118 nigel 77 fi
119 nigel 49 if [ $do5 = yes ] ; then
120 nigel 75 echo "Can't run test 5 because UTF-8 support is not configured"
121 nigel 49 exit 1
122 nigel 77 fi
123     if [ $do8 = yes ] ; then
124     echo "Can't run test 8 because UTF-8 support is not configured"
125     exit 1
126     fi
127 ph10 651 if [ $do12 = yes ] ; then
128     echo "Can't run test 12 because UTF-8 support is not configured"
129     exit 1
130     fi
131 nigel 77 fi
132 nigel 49
133 ph10 116 if [ $ucp -eq 0 ] ; then
134 nigel 75 if [ $do6 = yes ] ; then
135     echo "Can't run test 6 because Unicode property support is not configured"
136     exit 1
137     fi
138 nigel 77 if [ $do9 = yes ] ; then
139     echo "Can't run test 9 because Unicode property support is not configured"
140     exit 1
141     fi
142 ph10 164 if [ $do10 = yes ] ; then
143     echo "Can't run test 10 because Unicode property support is not configured"
144     exit 1
145     fi
146 ph10 651 if [ $do13 = yes ] ; then
147 ph10 448 echo "Can't run test 12 because Unicode property support is not configured"
148     exit 1
149     fi
150 nigel 77 fi
151 nigel 75
152 ph10 164 if [ $link_size -ne 2 ] ; then
153     if [ $do10 = yes ] ; then
154     echo "Can't run test 10 because the link size ($link_size) is not 2"
155     exit 1
156     fi
157 ph10 165 fi
158 ph10 164
159 ph10 671 if [ $jit -eq 0 ] ; then
160     if [ $do14 = "yes" ] ; then
161     echo "Can't run test 14 because JIT support is not configured"
162     exit 1
163     fi
164     else
165     if [ $do15 = "yes" ] ; then
166     echo "Can't run test 15 because JIT support is configured"
167     exit 1
168     fi
169 ph10 674 fi
170 ph10 116
171 ph10 671 # If no specific tests were requested, select all. Those that are not
172     # relevant will be skipped.
173    
174     if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no -a \
175     $do5 = no -a $do6 = no -a $do7 = no -a $do8 = no -a \
176     $do9 = no -a $do10 = no -a $do11 = no -a $do12 = no -a \
177     $do13 = no -a $do14 = no -a $do15 = no ] ; then
178 nigel 49 do1=yes
179 ph10 247 do2=yes
180 nigel 49 do3=yes
181 ph10 671 do4=yes
182     do5=yes
183     do6=yes
184 ph10 247 do7=yes
185 ph10 671 do8=yes
186     do9=yes
187     do10=yes
188 ph10 448 do11=yes
189 ph10 671 do12=yes
190     do13=yes
191     do14=yes
192     do15=yes
193 nigel 49 fi
194    
195 ph10 706 # Show which release and which test data
196 nigel 73
197 ph10 128 echo ""
198 ph10 706 echo PCRE C library tests using test data from $testdata
199     $sim ./pcretest /dev/null
200 nigel 73
201 ph10 666 # Primary test, compatible with JIT and all versions of Perl >= 5.8
202 nigel 49
203     if [ $do1 = yes ] ; then
204 ph10 559 echo "Test 1: main functionality (Compatible with Perl >= 5.8)"
205 ph10 666 for opt in "" "-s" $jitopt; do
206 ph10 689 $sim $valgrind ./pcretest -q $opt $testdata/testinput1 testtry
207 ph10 612 if [ $? = 0 ] ; then
208     $cf $testdata/testoutput1 testtry
209     if [ $? != 0 ] ; then exit 1; fi
210     else exit 1
211     fi
212 ph10 674 if [ "$opt" = "-s" ] ; then echo " OK with study"
213     elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
214     else echo " OK"
215 ph10 666 fi
216 ph10 654 done
217 nigel 49 fi
218    
219 ph10 666 # PCRE tests that are not JIT or Perl-compatible: API, errors, internals
220 nigel 49
221     if [ $do2 = yes ] ; then
222 ph10 449 echo "Test 2: API, errors, internals, and non-Perl stuff"
223 ph10 666 for opt in "" "-s" $jitopt; do
224 ph10 689 $sim $valgrind ./pcretest -q $opt $testdata/testinput2 testtry
225 ph10 612 if [ $? = 0 ] ; then
226     $cf $testdata/testoutput2 testtry
227     if [ $? != 0 ] ; then exit 1; fi
228     else
229     echo " "
230     echo "** Test 2 requires a lot of stack. If it has crashed with a"
231     echo "** segmentation fault, it may be that you do not have enough"
232     echo "** stack available by default. Please see the 'pcrestack' man"
233     echo "** page for a discussion of PCRE's stack usage."
234     echo " "
235     exit 1
236     fi
237 ph10 674 if [ "$opt" = "-s" ] ; then echo " OK with study"
238     elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
239     else echo " OK"
240 ph10 666 fi
241 ph10 654 done
242 nigel 49 fi
243    
244 ph10 157 # Locale-specific tests, provided that either the "fr_FR" or the "french"
245     # locale is available. The former is the Unix-like standard; the latter is
246 ph10 706 # for Windows. Another possibility is "fr", which needs to be run against
247     # the Windows-specific input and output files.
248 nigel 49
249 nigel 63 if [ $do3 = yes ] ; then
250 nigel 73 locale -a | grep '^fr_FR$' >/dev/null
251 nigel 49 if [ $? -eq 0 ] ; then
252 ph10 157 locale=fr_FR
253     infile=$testdata/testinput3
254     outfile=$testdata/testoutput3
255     else
256 ph10 706 infile=test3input
257     outfile=test3output
258 ph10 157 locale -a | grep '^french$' >/dev/null
259     if [ $? -eq 0 ] ; then
260     locale=french
261     sed 's/fr_FR/french/' $testdata/testinput3 >test3input
262     sed 's/fr_FR/french/' $testdata/testoutput3 >test3output
263     else
264 ph10 706 locale -a | grep '^fr$' >/dev/null
265     if [ $? -eq 0 ] ; then
266     locale=fr
267     sed 's/fr_FR/fr/' $testdata/wintestinput3 >test3input
268     sed 's/fr_FR/fr/' $testdata/wintestoutput3 >test3output
269     else
270     locale=
271 ph10 708 fi
272 ph10 157 fi
273 ph10 159 fi
274 ph10 157
275     if [ "$locale" != "" ] ; then
276     echo "Test 3: locale-specific features (using '$locale' locale)"
277 ph10 666 for opt in "" "-s" $jitopt; do
278 ph10 689 $sim $valgrind ./pcretest -q $opt $infile testtry
279 ph10 612 if [ $? = 0 ] ; then
280     $cf $outfile testtry
281     if [ $? != 0 ] ; then
282     echo " "
283     echo "Locale test did not run entirely successfully."
284     echo "This usually means that there is a problem with the locale"
285     echo "settings rather than a bug in PCRE."
286 ph10 654 break;
287 ph10 612 else
288 ph10 674 if [ "$opt" = "-s" ] ; then echo " OK with study"
289     elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
290     else echo " OK"
291 ph10 666 fi
292 ph10 612 fi
293     else exit 1
294 nigel 77 fi
295 ph10 654 done
296 nigel 49 else
297 ph10 157 echo "Cannot test locale-specific features - neither the 'fr_FR' nor the"
298     echo "'french' locale exists, or the \"locale\" command is not available"
299     echo "to check for them."
300 nigel 77 echo " "
301 nigel 49 fi
302     fi
303    
304     # Additional tests for UTF8 support
305    
306 nigel 63 if [ $do4 = yes ] ; then
307 ph10 559 echo "Test 4: UTF-8 support (Compatible with Perl >= 5.8)"
308 ph10 671 if [ $utf8 -eq 0 ] ; then
309     echo " Skipped because UTF-8 support is not available"
310 ph10 674 else
311 ph10 671 for opt in "" "-s" $jitopt; do
312 ph10 689 $sim $valgrind ./pcretest -q $opt $testdata/testinput4 testtry
313 ph10 671 if [ $? = 0 ] ; then
314     $cf $testdata/testoutput4 testtry
315     if [ $? != 0 ] ; then exit 1; fi
316     else exit 1
317     fi
318 ph10 674 if [ "$opt" = "-s" ] ; then echo " OK with study"
319     elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
320     else echo " OK"
321 ph10 671 fi
322     done
323 ph10 674 fi
324 nigel 49 fi
325    
326 nigel 63 if [ $do5 = yes ] ; then
327 ph10 426 echo "Test 5: API, internals, and non-Perl stuff for UTF-8 support"
328 ph10 671 if [ $utf8 -eq 0 ] ; then
329     echo " Skipped because UTF-8 support is not available"
330 ph10 674 else
331 ph10 671 for opt in "" "-s" $jitopt; do
332 ph10 689 $sim $valgrind ./pcretest -q $opt $testdata/testinput5 testtry
333 ph10 671 if [ $? = 0 ] ; then
334     $cf $testdata/testoutput5 testtry
335     if [ $? != 0 ] ; then exit 1; fi
336     else exit 1
337     fi
338 ph10 674 if [ "$opt" = "-s" ] ; then echo " OK with study"
339     elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
340     else echo " OK"
341 ph10 671 fi
342     done
343 ph10 674 fi
344 nigel 49 fi
345    
346 nigel 75 if [ $do6 = yes ] ; then
347 ph10 559 echo "Test 6: Unicode property support (Compatible with Perl >= 5.10)"
348 ph10 671 if [ $utf8 -eq 0 -o $ucp -eq 0 ] ; then
349     echo " Skipped because Unicode property support is not available"
350 ph10 674 else
351 ph10 671 for opt in "" "-s" $jitopt; do
352 ph10 689 $sim $valgrind ./pcretest -q $opt $testdata/testinput6 testtry
353 ph10 671 if [ $? = 0 ] ; then
354     $cf $testdata/testoutput6 testtry
355     if [ $? != 0 ] ; then exit 1; fi
356     else exit 1
357     fi
358 ph10 674 if [ "$opt" = "-s" ] ; then echo " OK with study"
359     elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
360     else echo " OK"
361 ph10 671 fi
362     done
363 ph10 674 fi
364 nigel 75 fi
365    
366 nigel 77 # Tests for DFA matching support
367    
368     if [ $do7 = yes ] ; then
369     echo "Test 7: DFA matching"
370 ph10 654 for opt in "" "-s"; do
371 ph10 689 $sim $valgrind ./pcretest -q $opt -dfa $testdata/testinput7 testtry
372 ph10 612 if [ $? = 0 ] ; then
373     $cf $testdata/testoutput7 testtry
374     if [ $? != 0 ] ; then exit 1; fi
375     else exit 1
376     fi
377 ph10 671 if [ "$opt" = "-s" ] ; then echo " OK with study" ; else echo " OK"; fi
378 ph10 654 done
379 nigel 77 fi
380    
381     if [ $do8 = yes ] ; then
382     echo "Test 8: DFA matching with UTF-8"
383 ph10 671 if [ $utf8 -eq 0 ] ; then
384     echo " Skipped because UTF-8 support is not available"
385 ph10 674 else
386 ph10 671 for opt in "" "-s"; do
387 ph10 689 $sim $valgrind ./pcretest -q $opt -dfa $testdata/testinput8 testtry
388 ph10 671 if [ $? = 0 ] ; then
389     $cf $testdata/testoutput8 testtry
390     if [ $? != 0 ] ; then exit 1; fi
391     else exit 1
392     fi
393     if [ "$opt" = "-s" ] ; then echo " OK with study" ; else echo " OK"; fi
394     done
395 ph10 674 fi
396 nigel 77 fi
397    
398     if [ $do9 = yes ] ; then
399     echo "Test 9: DFA matching with Unicode properties"
400 ph10 671 if [ $utf8 -eq 0 -o $ucp -eq 0 ] ; then
401     echo " Skipped because Unicode property support is not available"
402 ph10 674 else
403 ph10 671 for opt in "" "-s"; do
404 ph10 689 $sim $valgrind ./pcretest -q $opt -dfa $testdata/testinput9 testtry
405 ph10 671 if [ $? = 0 ] ; then
406     $cf $testdata/testoutput9 testtry
407     if [ $? != 0 ] ; then exit 1; fi
408     else exit 1
409     fi
410     if [ "$opt" = "-s" ] ; then echo " OK with study" ; else echo " OK"; fi
411     done
412 ph10 674 fi
413 nigel 77 fi
414    
415 ph10 164 # Test of internal offsets and code sizes. This test is run only when there
416     # is Unicode property support and the link size is 2. The actual tests are
417     # mostly the same as in some of the above, but in this test we inspect some
418     # offsets and sizes that require a known link size. This is a doublecheck for
419     # the maintainer, just in case something changes unexpectely.
420    
421     if [ $do10 = yes ] ; then
422     echo "Test 10: Internal offsets and code size tests"
423 ph10 674 if [ $link_size -ne 2 ] ; then
424 ph10 671 echo " Skipped because link size is not 2"
425 ph10 674 elif [ $ucp -eq 0 ] ; then
426 ph10 671 echo " Skipped because Unicode property support is not available"
427 ph10 674 else
428 ph10 671 for opt in "" "-s"; do
429 ph10 689 $sim $valgrind ./pcretest -q $opt $testdata/testinput10 testtry
430 ph10 671 if [ $? = 0 ] ; then
431     $cf $testdata/testoutput10 testtry
432     if [ $? != 0 ] ; then exit 1; fi
433     else exit 1
434     fi
435     if [ "$opt" = "-s" ] ; then echo " OK with study" ; else echo " OK"; fi
436     done
437 ph10 674 fi
438 ph10 164 fi
439    
440 ph10 651 # Test of Perl >= 5.10 features without UTF8 support
441 ph10 448
442     if [ $do11 = yes ] ; then
443 ph10 651 echo "Test 11: Features from Perl >= 5.10 without UTF8 support"
444 ph10 666 for opt in "" "-s" $jitopt; do
445 ph10 689 $sim $valgrind ./pcretest -q $opt $testdata/testinput11 testtry
446 ph10 612 if [ $? = 0 ] ; then
447     $cf $testdata/testoutput11 testtry
448     if [ $? != 0 ] ; then exit 1; fi
449     else exit 1
450     fi
451 ph10 674 if [ "$opt" = "-s" ] ; then echo " OK with study"
452     elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
453     else echo " OK"
454 ph10 666 fi
455 ph10 654 done
456 ph10 448 fi
457    
458 ph10 651 # Test of Perl >= 5.10 features with UTF8 support
459 ph10 448
460     if [ $do12 = yes ] ; then
461 ph10 651 echo "Test 12: Features from Perl >= 5.10 with UTF8 support"
462 ph10 671 if [ $utf8 -eq 0 ] ; then
463     echo " Skipped because UTF-8 support is not available"
464 ph10 674 else
465 ph10 671 for opt in "" "-s" $jitopt; do
466 ph10 689 $sim $valgrind ./pcretest -q $opt $testdata/testinput12 testtry
467 ph10 671 if [ $? = 0 ] ; then
468     $cf $testdata/testoutput12 testtry
469     if [ $? != 0 ] ; then exit 1; fi
470     else exit 1
471     fi
472 ph10 674 if [ "$opt" = "-s" ] ; then echo " OK with study"
473     elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
474     else echo " OK"
475 ph10 671 fi
476     done
477 ph10 674 fi
478 ph10 448 fi
479    
480 ph10 651 # Test non-Perl-compatible Unicode property support
481    
482     if [ $do13 = yes ] ; then
483     echo "Test 13: API, internals, and non-Perl stuff for Unicode property support"
484 ph10 671 if [ $utf8 -eq 0 -o $ucp -eq 0 ] ; then
485     echo " Skipped because Unicode property support is not available"
486 ph10 674 else
487 ph10 671 for opt in "" "-s" $jitopt; do
488 ph10 689 $sim $valgrind ./pcretest -q $opt $testdata/testinput13 testtry
489 ph10 671 if [ $? = 0 ] ; then
490     $cf $testdata/testoutput13 testtry
491     if [ $? != 0 ] ; then exit 1; fi
492     else exit 1
493     fi
494 ph10 674 if [ "$opt" = "-s" ] ; then echo " OK with study"
495     elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
496     else echo " OK"
497 ph10 671 fi
498     done
499 ph10 674 fi
500 ph10 671 fi
501    
502     # Test JIT-specific features when JIT is available
503    
504     if [ $do14 = yes ] ; then
505 ph10 689 echo "Test 14: JIT-specific features (JIT available)"
506 ph10 671 if [ $jit -eq 0 ] ; then
507 ph10 674 echo " Skipped because JIT is not available or not usable"
508 ph10 671 else
509 ph10 689 $sim $valgrind ./pcretest -q $testdata/testinput14 testtry
510 ph10 651 if [ $? = 0 ] ; then
511 ph10 671 $cf $testdata/testoutput14 testtry
512 ph10 651 if [ $? != 0 ] ; then exit 1; fi
513     else exit 1
514     fi
515 ph10 674 echo " OK"
516     fi
517 ph10 671 fi
518 ph10 674
519 ph10 671 # Test JIT-specific features when JIT is not available
520    
521     if [ $do15 = yes ] ; then
522 ph10 689 echo "Test 15: JIT-specific features (JIT not available)"
523 ph10 671 if [ $jit -ne 0 ] ; then
524     echo " Skipped because JIT is available"
525     else
526 ph10 689 $sim $valgrind ./pcretest -q $testdata/testinput15 testtry
527 ph10 671 if [ $? = 0 ] ; then
528     $cf $testdata/testoutput15 testtry
529     if [ $? != 0 ] ; then exit 1; fi
530     else exit 1
531 ph10 666 fi
532 ph10 674 echo " OK"
533     fi
534 ph10 651 fi
535    
536 nigel 49 # End

Properties

Name Value
svn:executable *
svn:keywords "Author Date Id Revision Url"

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12