blob: bc912da5dc77b26863db661bad908265c67a69ba [file] [log] [blame]
Janis Danisevskis53e448c2016-03-31 13:35:25 +01001#! /bin/sh
2
3###############################################################################
4# Run the PCRE2 tests using the pcre2test program. The appropriate tests are
5# selected, depending on which build-time options were used.
6#
7# When JIT support is available, all appropriate tests are run with and without
8# JIT, unless "-nojit" is given on the command line. There are also two tests
9# for JIT-specific features, one to be run when JIT support is available
10# (unless "-nojit" is specified), and one when it is not.
11#
12# Whichever of the 8-, 16- and 32-bit libraries exist are tested. It is also
13# possible to select which to test by giving "-8", "-16" or "-32" on the
14# command line.
15#
16# As well as "-nojit", "-8", "-16", and "-32", arguments for this script are
17# individual test numbers, ranges of tests such as 3-6 or 3- (meaning 3 to the
18# end), or a number preceded by ~ to exclude a test. For example, "3-15 ~10"
19# runs tests 3 to 15, excluding test 10, and just "~10" runs all the tests
20# except test 10. Whatever order the arguments are in, the tests are always run
21# in numerical order.
22#
23# Inappropriate tests are automatically skipped (with a comment to say so). For
24# example, if JIT support is not compiled, test 16 is skipped, whereas if JIT
25# support is compiled, test 15 is skipped.
26#
27# Other arguments can be one of the words "-valgrind", "-valgrind-log", or
28# "-sim" followed by an argument to run cross-compiled executables under a
29# simulator, for example:
30#
31# RunTest 3 -sim "qemu-arm -s 8388608"
32#
33# For backwards compatibility, -nojit, -valgrind, -valgrind-log, and -sim may
34# be given without the leading "-" character.
35#
36# When PCRE2 is compiled by clang with -fsanitize arguments, some tests need
37# very much more stack than normal. In environments where the stack can be
38# set at runtime, -bigstack sets a gigantic stack.
39#
40# There are two special cases where only one argument is allowed:
41#
42# If the first and only argument is "ebcdic", the script runs the special
43# EBCDIC test that can be useful for checking certain EBCDIC features, even
44# when run in an ASCII environment. PCRE2 must be built with EBCDIC support for
45# this test to be run.
46#
47# If the script is obeyed as "RunTest list", a list of available tests is
48# output, but none of them are run.
49###############################################################################
50
51# Define test titles in variables so that they can be output as a list. Some
52# of them are modified (e.g. with -8 or -16) when used in the actual tests.
53
54title0="Test 0: Unchecked pcre2test argument tests (to improve coverage)"
55title1="Test 1: Main non-UTF, non-UCP functionality (compatible with Perl >= 5.10)"
Janis Danisevskis8b979b22016-08-15 16:09:16 +010056title2="Test 2: API, errors, internals and non-Perl stuff"
Janis Danisevskis53e448c2016-03-31 13:35:25 +010057title3="Test 3: Locale-specific features"
58title4A="Test 4: UTF"
59title4B=" and Unicode property support (compatible with Perl >= 5.10)"
60title5A="Test 5: API, internals, and non-Perl stuff for UTF"
61title5B=" and UCP support"
62title6="Test 6: DFA matching main non-UTF, non-UCP functionality"
63title7A="Test 7: DFA matching with UTF"
64title7B=" and Unicode property support"
65title8="Test 8: Internal offsets and code size tests"
66title9="Test 9: Specials for the basic 8-bit library"
67title10="Test 10: Specials for the 8-bit library with UTF-8 and UCP support"
68title11="Test 11: Specials for the basic 16-bit and 32-bit libraries"
69title12="Test 12: Specials for the 16-bit and 32-bit libraries UTF and UCP support"
70title13="Test 13: DFA specials for the basic 16-bit and 32-bit libraries"
71title14="Test 14: DFA specials for UTF and UCP support"
72title15="Test 15: Non-JIT limits and other non-JIT tests"
73title16="Test 16: JIT-specific features when JIT is not available"
74title17="Test 17: JIT-specific features when JIT is available"
75title18="Test 18: Tests of the POSIX interface, excluding UTF/UCP"
76title19="Test 19: Tests of the POSIX interface with UTF/UCP"
Janis Danisevskis8b979b22016-08-15 16:09:16 +010077title20="Test 20: Serialization and code copy tests"
Janis Danisevskis53e448c2016-03-31 13:35:25 +010078title21="Test 21: \C tests without UTF (supported for DFA matching)"
79title22="Test 22: \C tests with UTF (not supported for DFA matching)"
80title23="Test 23: \C disabled test"
Elliott Hughes9bc971b2018-07-27 13:23:14 -070081title24="Test 24: Non-UTF pattern conversion tests"
82title25="Test 25: UTF pattern conversion tests"
83maxtest=25
Janis Danisevskis53e448c2016-03-31 13:35:25 +010084
85if [ $# -eq 1 -a "$1" = "list" ]; then
86 echo $title0
87 echo $title1
88 echo $title2 "(not UTF or UCP)"
89 echo $title3
90 echo $title4A $title4B
91 echo $title5A $title5B
92 echo $title6
93 echo $title7A $title7B
94 echo $title8
95 echo $title9
96 echo $title10
97 echo $title11
98 echo $title12
99 echo $title13
100 echo $title14
101 echo $title15
102 echo $title16
103 echo $title17
104 echo $title18
105 echo $title19
106 echo $title20
107 echo $title21
108 echo $title22
109 echo $title23
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700110 echo $title24
111 echo $title25
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100112 exit 0
113fi
114
115# Set up a suitable "diff" command for comparison. Some systems
116# have a diff that lacks a -u option. Try to deal with this.
117
118cf="diff"
119diff -u /dev/null /dev/null 2>/dev/null && cf="diff -u"
120
121# Find the test data
122
123if [ -n "$srcdir" -a -d "$srcdir" ] ; then
124 testdata="$srcdir/testdata"
125elif [ -d "./testdata" ] ; then
126 testdata=./testdata
127elif [ -d "../testdata" ] ; then
128 testdata=../testdata
129else
130 echo "Cannot find the testdata directory"
131 exit 1
132fi
133
134
135# ------ Function to check results of a test -------
136
137# This function is called with three parameters:
138#
139# $1 the value of $? after a call to pcre2test
140# $2 the suffix of the output file to compare with
141# $3 the $opt value (empty, -jit, or -dfa)
142#
143# Note: must define using name(), not "function name", for Solaris.
144
145checkresult()
146 {
147 if [ $1 -ne 0 ] ; then
148 echo "** pcre2test failed - check testtry"
149 exit 1
150 fi
151 case "$3" in
152 -jit) with=" with JIT";;
153 -dfa) with=" with DFA";;
154 *) with="";;
155 esac
156 $cf $testdata/testoutput$2 testtry
157 if [ $? != 0 ] ; then
158 echo ""
159 echo "** Test $2 failed$with"
160 exit 1
161 fi
162 echo " OK$with"
163 }
164
165
166# ------ Function to run and check a special pcre2test arguments test -------
167
168checkspecial()
169 {
170 $valgrind $vjs ./pcre2test $1 >>testtry
171 if [ $? -ne 0 ] ; then
172 echo "** pcre2test $1 failed - check testtry"
173 exit 1
174 fi
175 }
176
177
178# ------ Special EBCDIC Test -------
179
180if [ $# -eq 1 -a "$1" = "ebcdic" ]; then
181 $valgrind ./pcre2test -C ebcdic >/dev/null
182 ebcdic=$?
183 if [ $ebcdic -ne 1 ] ; then
184 echo "Cannot run EBCDIC tests: EBCDIC support not compiled"
185 exit 1
186 fi
187 for opt in "" "-dfa"; do
188 ./pcre2test -q $opt $testdata/testinputEBC >testtry
189 checkresult $? EBC "$opt"
190 done
191exit 0
192fi
193
194
195# ------ Normal Tests ------
196
197# Default values
198
199arg8=
200arg16=
201arg32=
202nojit=
203bigstack=
204sim=
205skip=
206valgrind=
207vjs=
208
209# This is in case the caller has set aliases (as I do - PH)
210unset cp ls mv rm
211
212# Process options and select which tests to run; for those that are explicitly
213# requested, check that the necessary optional facilities are available.
214
215do0=no
216do1=no
217do2=no
218do3=no
219do4=no
220do5=no
221do6=no
222do7=no
223do8=no
224do9=no
225do10=no
226do11=no
227do12=no
228do13=no
229do14=no
230do15=no
231do16=no
232do17=no
233do18=no
234do19=no
235do20=no
236do21=no
237do22=no
238do23=no
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700239do24=no
240do25=no
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100241
242while [ $# -gt 0 ] ; do
243 case $1 in
244 0) do0=yes;;
245 1) do1=yes;;
246 2) do2=yes;;
247 3) do3=yes;;
248 4) do4=yes;;
249 5) do5=yes;;
250 6) do6=yes;;
251 7) do7=yes;;
252 8) do8=yes;;
253 9) do9=yes;;
254 10) do10=yes;;
255 11) do11=yes;;
256 12) do12=yes;;
257 13) do13=yes;;
258 14) do14=yes;;
259 15) do15=yes;;
260 16) do16=yes;;
261 17) do17=yes;;
262 18) do18=yes;;
263 19) do19=yes;;
264 20) do20=yes;;
265 21) do21=yes;;
266 22) do22=yes;;
267 23) do23=yes;;
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700268 24) do24=yes;;
269 25) do25=yes;;
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100270 -8) arg8=yes;;
271 -16) arg16=yes;;
272 -32) arg32=yes;;
273 bigstack|-bigstack) bigstack=yes;;
274 nojit|-nojit) nojit=yes;;
275 sim|-sim) shift; sim=$1;;
Janis Danisevskis8b979b22016-08-15 16:09:16 +0100276 valgrind|-valgrind) valgrind="valgrind --tool=memcheck -q --smc-check=all-non-file";;
277 valgrind-log|-valgrind-log) valgrind="valgrind --tool=memcheck --num-callers=30 --leak-check=no --error-limit=no --smc-check=all-non-file --log-file=report.%p ";;
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100278 ~*)
279 if expr "$1" : '~[0-9][0-9]*$' >/dev/null; then
280 skip="$skip `expr "$1" : '~\([0-9]*\)*$'`"
281 else
282 echo "Unknown option or test selector '$1'"; exit 1
283 fi
284 ;;
285 *-*)
286 if expr "$1" : '[0-9][0-9]*-[0-9]*$' >/dev/null; then
287 tf=`expr "$1" : '\([0-9]*\)'`
288 tt=`expr "$1" : '.*-\([0-9]*\)'`
289 if [ "$tt" = "" ] ; then tt=$maxtest; fi
290 if expr \( "$tt" ">" "$maxtest" \) >/dev/null; then
291 echo "Invalid test range '$1'"; exit 1
292 fi
293 while expr "$tf" "<=" "$tt" >/dev/null; do
294 eval do${tf}=yes
295 tf=`expr $tf + 1`
296 done
297 else
298 echo "Invalid test range '$1'"; exit 1
299 fi
300 ;;
301 *) echo "Unknown option or test selector '$1'"; exit 1;;
302 esac
303 shift
304done
305
306# Find which optional facilities are available.
307
308$sim ./pcre2test -C linksize >/dev/null
309link_size=$?
310if [ $link_size -lt 2 ] ; then
311 echo "RunTest: Failed to find internal link size"
312 exit 1
313fi
314if [ $link_size -gt 4 ] ; then
315 echo "RunTest: Failed to find internal link size"
316 exit 1
317fi
318
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700319# If it is possible to set the system stack size and -bigstack was given,
320# set up a large stack.
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100321
322$sim ./pcre2test -S 1 /dev/null /dev/null
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700323if [ $? -eq 0 -a "$bigstack" != "" ] ; then
324 setstack="-S 64"
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100325else
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700326 setstack=""
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100327fi
328
329# All of 8-bit, 16-bit, and 32-bit character strings may be supported, but only
330# one need be.
331
332$sim ./pcre2test -C pcre2-8 >/dev/null
333support8=$?
334$sim ./pcre2test -C pcre2-16 >/dev/null
335support16=$?
336$sim ./pcre2test -C pcre2-32 >/dev/null
337support32=$?
338
339# \C may be disabled
340
341$sim ./pcre2test -C backslash-C >/dev/null
342supportBSC=$?
343
344# Initialize all bitsizes skipped
345
346test8=skip
347test16=skip
348test32=skip
349
350# If no bitsize arguments, select all that are available
351
352if [ "$arg8$arg16$arg32" = "" ] ; then
353 if [ $support8 -ne 0 ] ; then
354 test8=-8
355 fi
356 if [ $support16 -ne 0 ] ; then
357 test16=-16
358 fi
359 if [ $support32 -ne 0 ] ; then
360 test32=-32
361 fi
362
363# Otherwise, select requested bit sizes
364
365else
366 if [ "$arg8" = yes ] ; then
367 if [ $support8 -eq 0 ] ; then
368 echo "Cannot run 8-bit library tests: 8-bit library not compiled"
369 exit 1
370 fi
371 test8=-8
372 fi
373 if [ "$arg16" = yes ] ; then
374 if [ $support16 -eq 0 ] ; then
375 echo "Cannot run 16-bit library tests: 16-bit library not compiled"
376 exit 1
377 fi
378 test16=-16
379 fi
380 if [ "$arg32" = yes ] ; then
381 if [ $support32 -eq 0 ] ; then
382 echo "Cannot run 32-bit library tests: 32-bit library not compiled"
383 exit 1
384 fi
385 test32=-32
386 fi
387fi
388
389# UTF support is implied by Unicode support, and it always applies to all bit
390# sizes if both are supported; we can't have UTF-8 support without UTF-16 or
391# UTF-32 support.
392
393$sim ./pcre2test -C unicode >/dev/null
394utf=$?
395
396# When JIT is used with valgrind, we need to set up valgrind suppressions as
397# otherwise there are a lot of false positive valgrind reports when the
398# the hardware supports SSE2.
399
400jitopt=
401$sim ./pcre2test -C jit >/dev/null
402jit=$?
403if [ $jit -ne 0 -a "$nojit" != "yes" ] ; then
404 jitopt=-jit
405 if [ "$valgrind" != "" ] ; then
406 vjs="--suppressions=$testdata/valgrind-jit.supp"
407 fi
408fi
409
410# If no specific tests were requested, select all. Those that are not
411# relevant will be automatically skipped.
412
413if [ $do0 = no -a $do1 = no -a $do2 = no -a $do3 = no -a \
414 $do4 = no -a $do5 = no -a $do6 = no -a $do7 = no -a \
415 $do8 = no -a $do9 = no -a $do10 = no -a $do11 = no -a \
416 $do12 = no -a $do13 = no -a $do14 = no -a $do15 = no -a \
417 $do16 = no -a $do17 = no -a $do18 = no -a $do19 = no -a \
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700418 $do20 = no -a $do21 = no -a $do22 = no -a $do23 = no -a \
419 $do24 = no -a $do25 = no \
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100420 ]; then
421 do0=yes
422 do1=yes
423 do2=yes
424 do3=yes
425 do4=yes
426 do5=yes
427 do6=yes
428 do7=yes
429 do8=yes
430 do9=yes
431 do10=yes
432 do11=yes
433 do12=yes
434 do13=yes
435 do14=yes
436 do15=yes
437 do16=yes
438 do17=yes
439 do18=yes
440 do19=yes
441 do20=yes
442 do21=yes
443 do22=yes
444 do23=yes
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700445 do24=yes
446 do25=yes
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100447fi
448
449# Handle any explicit skips at this stage, so that an argument list may consist
450# only of explicit skips.
451
452for i in $skip; do eval do$i=no; done
453
454# Show which release and which test data
455
456echo ""
457echo PCRE2 C library tests using test data from $testdata
458$sim ./pcre2test /dev/null
459echo ""
460
461for bmode in "$test8" "$test16" "$test32"; do
462 case "$bmode" in
463 skip) continue;;
464 -16) if [ "$test8$test32" != "skipskip" ] ; then echo ""; fi
465 bits=16; echo "---- Testing 16-bit library ----"; echo "";;
466 -32) if [ "$test8$test16" != "skipskip" ] ; then echo ""; fi
467 bits=32; echo "---- Testing 32-bit library ----"; echo "";;
468 -8) bits=8; echo "---- Testing 8-bit library ----"; echo "";;
469 esac
470
471 # Test 0 is a special test. Its output is not checked, because it will
472 # be different on different hardware and with different configurations.
473 # Running this test just exercises the code.
474
475 if [ $do0 = yes ] ; then
476 echo $title0
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700477 echo '/abc/jit,memory,framesize' >testSinput
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100478 echo ' abc' >>testSinput
479 echo '' >testtry
480 checkspecial '-C'
481 checkspecial '--help'
482 checkspecial '-S 1 -t 10 testSinput'
483 echo " OK"
484 fi
485
486 # Primary non-UTF test, compatible with JIT and all versions of Perl >= 5.8
487
488 if [ $do1 = yes ] ; then
489 echo $title1
490 for opt in "" $jitopt; do
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700491 $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput1 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100492 checkresult $? 1 "$opt"
493 done
494 fi
495
496 # PCRE2 tests that are not Perl-compatible: API, errors, internals
497
498 if [ $do2 = yes ] ; then
499 echo $title2 "(excluding UTF-$bits)"
500 for opt in "" $jitopt; do
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700501 $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput2 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100502 if [ $? = 0 ] ; then
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700503 $sim $valgrind ${opt:+$vjs} ./pcre2test -q $bmode $opt -error -65,-62,-2,-1,0,100,101,191,200 >>testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100504 checkresult $? 2 "$opt"
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100505 fi
506 done
507 fi
508
509 # Locale-specific tests, provided that either the "fr_FR", "fr_CA", "french"
510 # or "fr" locale is available. The first two are Unix-like standards; the
511 # last two are for Windows. Unfortunately, different versions of the French
512 # locale give different outputs for some items. This test passes if the
513 # output matches any one of the alternative output files.
514
515 if [ $do3 = yes ] ; then
516 locale=
517
518 # In some environments locales that are listed by the "locale -a"
519 # command do not seem to work with setlocale(). Therefore, we do
520 # a preliminary test to see if pcre2test can set one before going
521 # on to use it.
522
523 for loc in 'fr_FR' 'french' 'fr' 'fr_CA'; do
524 locale -a | grep "^$loc\$" >/dev/null
525 if [ $? -eq 0 ] ; then
526 echo "/a/locale=$loc" | \
527 $sim $valgrind ./pcre2test -q $bmode | \
528 grep "Failed to set locale" >/dev/null
529 if [ $? -ne 0 ] ; then
530 locale=$loc
531 if [ "$locale" = "fr_FR" ] ; then
532 infile=$testdata/testinput3
533 outfile=$testdata/testoutput3
534 outfile2=$testdata/testoutput3A
535 outfile3=$testdata/testoutput3B
536 else
537 infile=test3input
538 outfile=test3output
539 outfile2=test3outputA
540 outfile3=test3outputB
541 sed "s/fr_FR/$loc/" $testdata/testinput3 >test3input
542 sed "s/fr_FR/$loc/" $testdata/testoutput3 >test3output
543 sed "s/fr_FR/$loc/" $testdata/testoutput3A >test3outputA
544 sed "s/fr_FR/$loc/" $testdata/testoutput3B >test3outputB
545 fi
546 break
547 fi
548 fi
549 done
550
551 if [ "$locale" != "" ] ; then
552 echo $title3 "(using '$locale' locale)"
553 for opt in "" $jitopt; do
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700554 $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $infile testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100555 if [ $? = 0 ] ; then
556 case "$opt" in
557 -jit) with=" with JIT";;
558 *) with="";;
559 esac
560 if $cf $outfile testtry >teststdout || \
561 $cf $outfile2 testtry >teststdout || \
562 $cf $outfile3 testtry >teststdout
563 then
564 echo " OK$with"
565 else
566 echo "** Locale test did not run successfully$with. The output did not match"
567 echo " $outfile, $outfile2 or $outfile3."
568 echo " This may mean that there is a problem with the locale settings rather"
569 echo " than a bug in PCRE2."
570 exit 1
571 fi
572 else exit 1
573 fi
574 done
575 else
576 echo "Cannot test locale-specific features - none of the 'fr_FR', 'fr_CA',"
577 echo "'fr' or 'french' locales can be set, or the \"locale\" command is"
578 echo "not available to check for them."
579 echo " "
580 fi
581 fi
582
583 # Tests for UTF and Unicode property support
584
585 if [ $do4 = yes ] ; then
586 echo ${title4A}-${bits}${title4B}
587 if [ $utf -eq 0 ] ; then
588 echo " Skipped because UTF-$bits support is not available"
589 else
590 for opt in "" $jitopt; do
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700591 $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput4 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100592 checkresult $? 4 "$opt"
593 done
594 fi
595 fi
596
597 if [ $do5 = yes ] ; then
598 echo ${title5A}-${bits}$title5B
599 if [ $utf -eq 0 ] ; then
600 echo " Skipped because UTF-$bits support is not available"
601 else
602 for opt in "" $jitopt; do
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700603 $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput5 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100604 checkresult $? 5 "$opt"
605 done
606 fi
607 fi
608
609 # Tests for DFA matching support
610
611 if [ $do6 = yes ] ; then
612 echo $title6
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700613 $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput6 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100614 checkresult $? 6 ""
615 fi
616
617 if [ $do7 = yes ] ; then
618 echo ${title7A}-${bits}$title7B
619 if [ $utf -eq 0 ] ; then
620 echo " Skipped because UTF-$bits support is not available"
621 else
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700622 $sim $valgrind ./pcre2test -q $setstack $bmode $opt $testdata/testinput7 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100623 checkresult $? 7 ""
624 fi
625 fi
626
627 # Test of internal offsets and code sizes. This test is run only when there
628 # is UTF/UCP support. The actual tests are mostly the same as in some of the
629 # above, but in this test we inspect some offsets and sizes. This is a
630 # doublecheck for the maintainer, just in case something changes unexpectely.
631 # The output from this test is different in 8-bit, 16-bit, and 32-bit modes
632 # and for different link sizes, so there are different output files for each
633 # mode and link size.
634
635 if [ $do8 = yes ] ; then
636 echo $title8
637 if [ $utf -eq 0 ] ; then
638 echo " Skipped because UTF-$bits support is not available"
639 else
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700640 $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput8 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100641 checkresult $? 8-$bits-$link_size ""
642 fi
643 fi
644
645 # Tests for 8-bit-specific features
646
647 if [ "$do9" = yes ] ; then
648 echo $title9
649 if [ "$bits" = "16" -o "$bits" = "32" ] ; then
650 echo " Skipped when running 16/32-bit tests"
651 else
652 for opt in "" $jitopt; do
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700653 $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput9 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100654 checkresult $? 9 "$opt"
655 done
656 fi
657 fi
658
659 # Tests for UTF-8 and UCP 8-bit-specific features
660
661 if [ "$do10" = yes ] ; then
662 echo $title10
663 if [ "$bits" = "16" -o "$bits" = "32" ] ; then
664 echo " Skipped when running 16/32-bit tests"
665 elif [ $utf -eq 0 ] ; then
666 echo " Skipped because UTF-$bits support is not available"
667 else
668 for opt in "" $jitopt; do
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700669 $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput10 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100670 checkresult $? 10 "$opt"
671 done
672 fi
673 fi
674
675 # Tests for 16-bit and 32-bit features. Output is different for the two widths.
676
677 if [ $do11 = yes ] ; then
678 echo $title11
679 if [ "$bits" = "8" ] ; then
680 echo " Skipped when running 8-bit tests"
681 else
682 for opt in "" $jitopt; do
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700683 $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput11 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100684 checkresult $? 11-$bits "$opt"
685 done
686 fi
687 fi
688
689 # Tests for 16-bit and 32-bit features with UTF-16/32 and UCP support. Output
690 # is different for the two widths.
691
692 if [ $do12 = yes ] ; then
693 echo $title12
694 if [ "$bits" = "8" ] ; then
695 echo " Skipped when running 8-bit tests"
696 elif [ $utf -eq 0 ] ; then
697 echo " Skipped because UTF-$bits support is not available"
698 else
699 for opt in "" $jitopt; do
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700700 $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput12 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100701 checkresult $? 12-$bits "$opt"
702 done
703 fi
704 fi
705
706 # Tests for 16/32-bit-specific features in DFA non-UTF modes
707
708 if [ $do13 = yes ] ; then
709 echo $title13
710 if [ "$bits" = "8" ] ; then
711 echo " Skipped when running 8-bit tests"
712 else
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700713 $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput13 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100714 checkresult $? 13 ""
715 fi
716 fi
717
718 # Tests for DFA UTF and UCP features. Output is different for the different widths.
719
720 if [ $do14 = yes ] ; then
721 echo $title14
722 if [ $utf -eq 0 ] ; then
723 echo " Skipped because UTF-$bits support is not available"
724 else
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700725 $sim $valgrind ./pcre2test -q $setstack $bmode $opt $testdata/testinput14 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100726 checkresult $? 14-$bits ""
727 fi
728 fi
729
730 # Test non-JIT match and recursion limits
731
732 if [ $do15 = yes ] ; then
733 echo $title15
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700734 $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput15 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100735 checkresult $? 15 ""
736 fi
737
738 # Test JIT-specific features when JIT is not available
739
740 if [ $do16 = yes ] ; then
741 echo $title16
742 if [ $jit -ne 0 ] ; then
743 echo " Skipped because JIT is available"
744 else
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700745 $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput16 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100746 checkresult $? 16 ""
747 fi
748 fi
749
750 # Test JIT-specific features when JIT is available
751
752 if [ $do17 = yes ] ; then
753 echo $title17
754 if [ $jit -eq 0 -o "$nojit" = "yes" ] ; then
755 echo " Skipped because JIT is not available or nojit was specified"
756 else
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700757 $sim $valgrind $vjs ./pcre2test -q $setstack $bmode $testdata/testinput17 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100758 checkresult $? 17 ""
759 fi
760 fi
761
762 # Tests for the POSIX interface without UTF/UCP (8-bit only)
763
764 if [ $do18 = yes ] ; then
765 echo $title18
766 if [ "$bits" = "16" -o "$bits" = "32" ] ; then
767 echo " Skipped when running 16/32-bit tests"
768 else
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700769 $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput18 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100770 checkresult $? 18 ""
771 fi
772 fi
773
774 # Tests for the POSIX interface with UTF/UCP (8-bit only)
775
776 if [ $do19 = yes ] ; then
777 echo $title19
778 if [ "$bits" = "16" -o "$bits" = "32" ] ; then
779 echo " Skipped when running 16/32-bit tests"
780 elif [ $utf -eq 0 ] ; then
781 echo " Skipped because UTF-$bits support is not available"
782 else
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700783 $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput19 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100784 checkresult $? 19 ""
785 fi
786 fi
787
788 # Serialization tests
789
790 if [ $do20 = yes ] ; then
791 echo $title20
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700792 $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput20 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100793 checkresult $? 20 ""
794 fi
795
796 # \C tests without UTF - DFA matching is supported
797
798 if [ "$do21" = yes ] ; then
799 echo $title21
800 if [ $supportBSC -eq 0 ] ; then
801 echo " Skipped because \C is disabled"
802 else
803 for opt in "" $jitopt -dfa; do
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700804 $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput21 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100805 checkresult $? 21 "$opt"
806 done
807 fi
808 fi
809
810 # \C tests with UTF - DFA matching is not supported for \C in UTF mode
811
812 if [ "$do22" = yes ] ; then
813 echo $title22
814 if [ $supportBSC -eq 0 ] ; then
815 echo " Skipped because \C is disabled"
816 elif [ $utf -eq 0 ] ; then
817 echo " Skipped because UTF-$bits support is not available"
818 else
819 for opt in "" $jitopt; do
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700820 $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput22 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100821 checkresult $? 22-$bits "$opt"
822 done
823 fi
824 fi
825
826 # Test when \C is disabled
827
828 if [ "$do23" = yes ] ; then
829 echo $title23
830 if [ $supportBSC -ne 0 ] ; then
831 echo " Skipped because \C is not disabled"
832 else
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700833 $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput23 testtry
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100834 checkresult $? 23 ""
835 fi
836 fi
837
Elliott Hughes9bc971b2018-07-27 13:23:14 -0700838 # Non-UTF pattern conversion tests
839
840 if [ "$do24" = yes ] ; then
841 echo $title24
842 $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput24 testtry
843 checkresult $? 24 ""
844 fi
845
846 # UTF pattern converson tests
847
848 if [ "$do25" = yes ] ; then
849 echo $title25
850 if [ $utf -eq 0 ] ; then
851 echo " Skipped because UTF-$bits support is not available"
852 else
853 $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput25 testtry
854 checkresult $? 25 ""
855 fi
856 fi
857
Janis Danisevskis53e448c2016-03-31 13:35:25 +0100858# End of loop for 8/16/32-bit tests
859done
860
861# Clean up local working files
862rm -f testSinput test3input testsaved1 testsaved2 test3output test3outputA test3outputB teststdout teststderr testtry
863
864# End