• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#! /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)"
56title2="Test 2: API, errors, internals and non-Perl stuff"
57title3="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"
77title20="Test 20: Serialization and code copy tests"
78title21="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"
81title24="Test 24: Non-UTF pattern conversion tests"
82title25="Test 25: UTF pattern conversion tests"
83maxtest=25
84
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
110  echo $title24
111  echo $title25
112  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
239do24=no
240do25=no
241
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;;
268   24) do24=yes;;
269   25) do25=yes;;
270   -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;;
276   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 ";;
278   ~*)
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
319# If it is possible to set the system stack size and -bigstack was given,
320# set up a large stack.
321
322$sim ./pcre2test -S 1 /dev/null /dev/null
323if [ $? -eq 0 -a "$bigstack" != "" ] ; then
324  setstack="-S 64"
325else
326  setstack=""
327fi
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 \
418     $do20 = no -a $do21 = no -a $do22 = no -a $do23 = no -a \
419     $do24 = no -a $do25 = no \
420   ]; 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
445  do24=yes
446  do25=yes
447fi
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
477    echo '/abc/jit,memory,framesize' >testSinput
478    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
491      $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput1 testtry
492      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
501      $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput2 testtry
502      if [ $? = 0 ] ; then
503        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $bmode $opt -error -70,-62,-2,-1,0,100,101,191,200 >>testtry
504        checkresult $? 2 "$opt"
505      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
554        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $infile testtry
555        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
591        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput4 testtry
592        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
603        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput5 testtry
604        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
613    $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput6 testtry
614    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
622      $sim $valgrind ./pcre2test -q $setstack $bmode $opt $testdata/testinput7 testtry
623      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
640      $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput8 testtry
641      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
653        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput9 testtry
654        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
669        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput10 testtry
670        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
683        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput11 testtry
684        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
700        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput12 testtry
701        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
713      $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput13 testtry
714      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
725      $sim $valgrind ./pcre2test -q $setstack $bmode $opt $testdata/testinput14 testtry
726      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
734    $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput15 testtry
735    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
745      $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput16 testtry
746      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
757      $sim $valgrind $vjs ./pcre2test -q $setstack $bmode $testdata/testinput17 testtry
758      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
769      $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput18 testtry
770      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
783      $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput19 testtry
784      checkresult $? 19 ""
785    fi
786  fi
787
788  # Serialization tests
789
790  if [ $do20 = yes ] ; then
791    echo $title20
792    $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput20 testtry
793    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
804        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput21 testtry
805        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
820        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput22 testtry
821        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
833      $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput23 testtry
834      checkresult $? 23 ""
835    fi
836  fi
837
838  # 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 conversion 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
858# 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
865