xref: /aosp_15_r20/external/pcre/RunTest (revision 22dc650d8ae982c6770746019a6f94af92b0f024)
1*22dc650dSSadaf Ebrahimi#! /bin/sh
2*22dc650dSSadaf Ebrahimi
3*22dc650dSSadaf Ebrahimi###############################################################################
4*22dc650dSSadaf Ebrahimi# Run the PCRE2 tests using the pcre2test program. The appropriate tests are
5*22dc650dSSadaf Ebrahimi# selected, depending on which build-time options were used.
6*22dc650dSSadaf Ebrahimi#
7*22dc650dSSadaf Ebrahimi# When JIT support is available, all appropriate tests are run with and without
8*22dc650dSSadaf Ebrahimi# JIT, unless "-nojit" is given on the command line. There are also two tests
9*22dc650dSSadaf Ebrahimi# for JIT-specific features, one to be run when JIT support is available
10*22dc650dSSadaf Ebrahimi# (unless "-nojit" is specified), and one when it is not.
11*22dc650dSSadaf Ebrahimi#
12*22dc650dSSadaf Ebrahimi# Whichever of the 8-, 16- and 32-bit libraries exist are tested. It is also
13*22dc650dSSadaf Ebrahimi# possible to select which to test by giving "-8", "-16" or "-32" on the
14*22dc650dSSadaf Ebrahimi# command line.
15*22dc650dSSadaf Ebrahimi#
16*22dc650dSSadaf Ebrahimi# As well as "-nojit", "-8", "-16", and "-32", arguments for this script are
17*22dc650dSSadaf Ebrahimi# individual test numbers, ranges of tests such as 3-6 or 3- (meaning 3 to the
18*22dc650dSSadaf Ebrahimi# end), or a number preceded by ~ to exclude a test. For example, "3-15 ~10"
19*22dc650dSSadaf Ebrahimi# runs tests 3 to 15, excluding test 10, and just "~10" runs all the tests
20*22dc650dSSadaf Ebrahimi# except test 10. Whatever order the arguments are in, these tests are always
21*22dc650dSSadaf Ebrahimi# run in numerical order.
22*22dc650dSSadaf Ebrahimi#
23*22dc650dSSadaf Ebrahimi# If no specific tests are selected (which is the case when this script is run
24*22dc650dSSadaf Ebrahimi# via 'make check') the default is to run all the numbered tests.
25*22dc650dSSadaf Ebrahimi#
26*22dc650dSSadaf Ebrahimi# There may also be named (as well as numbered) tests for special purposes. At
27*22dc650dSSadaf Ebrahimi# present there is just one, called "heap". This test's output contains the
28*22dc650dSSadaf Ebrahimi# sizes of heap frames and frame vectors, which depend on the environment. It
29*22dc650dSSadaf Ebrahimi# is therefore not run unless explicitly requested.
30*22dc650dSSadaf Ebrahimi#
31*22dc650dSSadaf Ebrahimi# Inappropriate tests are automatically skipped (with a comment to say so). For
32*22dc650dSSadaf Ebrahimi# example, if JIT support is not compiled, test 16 is skipped, whereas if JIT
33*22dc650dSSadaf Ebrahimi# support is compiled, test 15 is skipped.
34*22dc650dSSadaf Ebrahimi#
35*22dc650dSSadaf Ebrahimi# Other arguments can be one of the words "-valgrind", "-valgrind-log", or
36*22dc650dSSadaf Ebrahimi# "-sim" followed by an argument to run cross-compiled executables under a
37*22dc650dSSadaf Ebrahimi# simulator, for example:
38*22dc650dSSadaf Ebrahimi#
39*22dc650dSSadaf Ebrahimi# RunTest 3 -sim "qemu-arm -s 8388608"
40*22dc650dSSadaf Ebrahimi#
41*22dc650dSSadaf Ebrahimi# For backwards compatibility, -nojit, -valgrind, -valgrind-log, and -sim may
42*22dc650dSSadaf Ebrahimi# be given without the leading "-" character.
43*22dc650dSSadaf Ebrahimi#
44*22dc650dSSadaf Ebrahimi# When PCRE2 is compiled by clang with -fsanitize arguments, some tests need
45*22dc650dSSadaf Ebrahimi# very much more stack than normal. In environments where the stack can be
46*22dc650dSSadaf Ebrahimi# set at runtime, -bigstack sets a gigantic stack.
47*22dc650dSSadaf Ebrahimi#
48*22dc650dSSadaf Ebrahimi# There are two special cases where only one argument is allowed:
49*22dc650dSSadaf Ebrahimi#
50*22dc650dSSadaf Ebrahimi# If the first and only argument is "ebcdic", the script runs the special
51*22dc650dSSadaf Ebrahimi# EBCDIC test that can be useful for checking certain EBCDIC features, even
52*22dc650dSSadaf Ebrahimi# when run in an ASCII environment. PCRE2 must be built with EBCDIC support for
53*22dc650dSSadaf Ebrahimi# this test to be run.
54*22dc650dSSadaf Ebrahimi#
55*22dc650dSSadaf Ebrahimi# If the script is obeyed as "RunTest list", a list of available tests is
56*22dc650dSSadaf Ebrahimi# output, but none of them are run.
57*22dc650dSSadaf Ebrahimi###############################################################################
58*22dc650dSSadaf Ebrahimi
59*22dc650dSSadaf Ebrahimi# Define test titles in variables so that they can be output as a list. Some
60*22dc650dSSadaf Ebrahimi# of them are modified (e.g. with -8 or -16) when used in the actual tests.
61*22dc650dSSadaf Ebrahimi
62*22dc650dSSadaf Ebrahimititle0="Test 0: Unchecked pcre2test argument tests (to improve coverage)"
63*22dc650dSSadaf Ebrahimititle1="Test 1: Main non-UTF, non-UCP functionality (compatible with Perl >= 5.10)"
64*22dc650dSSadaf Ebrahimititle2="Test 2: API, errors, internals and non-Perl stuff"
65*22dc650dSSadaf Ebrahimititle3="Test 3: Locale-specific features"
66*22dc650dSSadaf Ebrahimititle4A="Test 4: UTF"
67*22dc650dSSadaf Ebrahimititle4B=" and Unicode property support (compatible with Perl >= 5.10)"
68*22dc650dSSadaf Ebrahimititle5A="Test 5: API, internals, and non-Perl stuff for UTF"
69*22dc650dSSadaf Ebrahimititle5B=" and UCP support"
70*22dc650dSSadaf Ebrahimititle6="Test 6: DFA matching main non-UTF, non-UCP functionality"
71*22dc650dSSadaf Ebrahimititle7A="Test 7: DFA matching with UTF"
72*22dc650dSSadaf Ebrahimititle7B=" and Unicode property support"
73*22dc650dSSadaf Ebrahimititle8="Test 8: Internal offsets and code size tests"
74*22dc650dSSadaf Ebrahimititle9="Test 9: Specials for the basic 8-bit library"
75*22dc650dSSadaf Ebrahimititle10="Test 10: Specials for the 8-bit library with UTF-8 and UCP support"
76*22dc650dSSadaf Ebrahimititle11="Test 11: Specials for the basic 16-bit and 32-bit libraries"
77*22dc650dSSadaf Ebrahimititle12="Test 12: Specials for the 16-bit and 32-bit libraries UTF and UCP support"
78*22dc650dSSadaf Ebrahimititle13="Test 13: DFA specials for the basic 16-bit and 32-bit libraries"
79*22dc650dSSadaf Ebrahimititle14="Test 14: DFA specials for UTF and UCP support"
80*22dc650dSSadaf Ebrahimititle15="Test 15: Non-JIT limits and other non-JIT tests"
81*22dc650dSSadaf Ebrahimititle16="Test 16: JIT-specific features when JIT is not available"
82*22dc650dSSadaf Ebrahimititle17="Test 17: JIT-specific features when JIT is available"
83*22dc650dSSadaf Ebrahimititle18="Test 18: Tests of the POSIX interface, excluding UTF/UCP"
84*22dc650dSSadaf Ebrahimititle19="Test 19: Tests of the POSIX interface with UTF/UCP"
85*22dc650dSSadaf Ebrahimititle20="Test 20: Serialization and code copy tests"
86*22dc650dSSadaf Ebrahimititle21="Test 21: \C tests without UTF (supported for DFA matching)"
87*22dc650dSSadaf Ebrahimititle22="Test 22: \C tests with UTF (not supported for DFA matching)"
88*22dc650dSSadaf Ebrahimititle23="Test 23: \C disabled test"
89*22dc650dSSadaf Ebrahimititle24="Test 24: Non-UTF pattern conversion tests"
90*22dc650dSSadaf Ebrahimititle25="Test 25: UTF pattern conversion tests"
91*22dc650dSSadaf Ebrahimititle26="Test 26: Auto-generated unicode property tests"
92*22dc650dSSadaf Ebrahimimaxtest=26
93*22dc650dSSadaf Ebrahimititleheap="Test 'heap': Environment-specific heap tests"
94*22dc650dSSadaf Ebrahimi
95*22dc650dSSadaf Ebrahimiif [ $# -eq 1 -a "$1" = "list" ]; then
96*22dc650dSSadaf Ebrahimi  echo $title0
97*22dc650dSSadaf Ebrahimi  echo $title1
98*22dc650dSSadaf Ebrahimi  echo $title2 "(not UTF or UCP)"
99*22dc650dSSadaf Ebrahimi  echo $title3
100*22dc650dSSadaf Ebrahimi  echo $title4A $title4B
101*22dc650dSSadaf Ebrahimi  echo $title5A $title5B
102*22dc650dSSadaf Ebrahimi  echo $title6
103*22dc650dSSadaf Ebrahimi  echo $title7A $title7B
104*22dc650dSSadaf Ebrahimi  echo $title8
105*22dc650dSSadaf Ebrahimi  echo $title9
106*22dc650dSSadaf Ebrahimi  echo $title10
107*22dc650dSSadaf Ebrahimi  echo $title11
108*22dc650dSSadaf Ebrahimi  echo $title12
109*22dc650dSSadaf Ebrahimi  echo $title13
110*22dc650dSSadaf Ebrahimi  echo $title14
111*22dc650dSSadaf Ebrahimi  echo $title15
112*22dc650dSSadaf Ebrahimi  echo $title16
113*22dc650dSSadaf Ebrahimi  echo $title17
114*22dc650dSSadaf Ebrahimi  echo $title18
115*22dc650dSSadaf Ebrahimi  echo $title19
116*22dc650dSSadaf Ebrahimi  echo $title20
117*22dc650dSSadaf Ebrahimi  echo $title21
118*22dc650dSSadaf Ebrahimi  echo $title22
119*22dc650dSSadaf Ebrahimi  echo $title23
120*22dc650dSSadaf Ebrahimi  echo $title24
121*22dc650dSSadaf Ebrahimi  echo $title25
122*22dc650dSSadaf Ebrahimi  echo $title26
123*22dc650dSSadaf Ebrahimi  echo ""
124*22dc650dSSadaf Ebrahimi  echo $titleheap
125*22dc650dSSadaf Ebrahimi  echo ""
126*22dc650dSSadaf Ebrahimi  echo "Numbered tests are automatically run if nothing selected."
127*22dc650dSSadaf Ebrahimi  echo "Named tests must be explicitly selected."
128*22dc650dSSadaf Ebrahimi  exit 0
129*22dc650dSSadaf Ebrahimifi
130*22dc650dSSadaf Ebrahimi
131*22dc650dSSadaf Ebrahimi# Set up a suitable "diff" command for comparison. Some systems
132*22dc650dSSadaf Ebrahimi# have a diff that lacks a -u option. Try to deal with this.
133*22dc650dSSadaf Ebrahimi
134*22dc650dSSadaf Ebrahimicf="diff"
135*22dc650dSSadaf Ebrahimidiff -u /dev/null /dev/null 2>/dev/null && cf="diff -u"
136*22dc650dSSadaf Ebrahimi
137*22dc650dSSadaf Ebrahimi# Find the test data
138*22dc650dSSadaf Ebrahimi
139*22dc650dSSadaf Ebrahimiif [ -n "$srcdir" -a -d "$srcdir" ] ; then
140*22dc650dSSadaf Ebrahimi  testdata="$srcdir/testdata"
141*22dc650dSSadaf Ebrahimielif [ -d "./testdata" ] ; then
142*22dc650dSSadaf Ebrahimi  testdata=./testdata
143*22dc650dSSadaf Ebrahimielif [ -d "../testdata" ] ; then
144*22dc650dSSadaf Ebrahimi  testdata=../testdata
145*22dc650dSSadaf Ebrahimielse
146*22dc650dSSadaf Ebrahimi  echo "Cannot find the testdata directory"
147*22dc650dSSadaf Ebrahimi  exit 1
148*22dc650dSSadaf Ebrahimifi
149*22dc650dSSadaf Ebrahimi
150*22dc650dSSadaf Ebrahimi
151*22dc650dSSadaf Ebrahimi# ------ Function to check results of a test -------
152*22dc650dSSadaf Ebrahimi
153*22dc650dSSadaf Ebrahimi# This function is called with three parameters:
154*22dc650dSSadaf Ebrahimi#
155*22dc650dSSadaf Ebrahimi#  $1 the value of $? after a call to pcre2test
156*22dc650dSSadaf Ebrahimi#  $2 the suffix of the output file to compare with
157*22dc650dSSadaf Ebrahimi#  $3 the $opt value (empty, -jit, or -dfa)
158*22dc650dSSadaf Ebrahimi#
159*22dc650dSSadaf Ebrahimi# Note: must define using name(), not "function name", for Solaris.
160*22dc650dSSadaf Ebrahimi
161*22dc650dSSadaf Ebrahimicheckresult()
162*22dc650dSSadaf Ebrahimi  {
163*22dc650dSSadaf Ebrahimi  if [ $1 -ne 0 ] ; then
164*22dc650dSSadaf Ebrahimi    echo "** pcre2test failed - check testtry"
165*22dc650dSSadaf Ebrahimi    exit 1
166*22dc650dSSadaf Ebrahimi  fi
167*22dc650dSSadaf Ebrahimi  case "$3" in
168*22dc650dSSadaf Ebrahimi    -jit) with=" with JIT";;
169*22dc650dSSadaf Ebrahimi    -dfa) with=" with DFA";;
170*22dc650dSSadaf Ebrahimi    *)    with="";;
171*22dc650dSSadaf Ebrahimi  esac
172*22dc650dSSadaf Ebrahimi  $cf $testdata/testoutput$2 testtry
173*22dc650dSSadaf Ebrahimi  if [ $? != 0 ] ; then
174*22dc650dSSadaf Ebrahimi    echo ""
175*22dc650dSSadaf Ebrahimi    echo "** Test $2 failed$with"
176*22dc650dSSadaf Ebrahimi    exit 1
177*22dc650dSSadaf Ebrahimi  fi
178*22dc650dSSadaf Ebrahimi  echo "  OK$with"
179*22dc650dSSadaf Ebrahimi  }
180*22dc650dSSadaf Ebrahimi
181*22dc650dSSadaf Ebrahimi
182*22dc650dSSadaf Ebrahimi# ------ Function to run and check a special pcre2test arguments test -------
183*22dc650dSSadaf Ebrahimi
184*22dc650dSSadaf Ebrahimicheckspecial()
185*22dc650dSSadaf Ebrahimi  {
186*22dc650dSSadaf Ebrahimi  $valgrind  $vjs ./pcre2test $1 >>testtry
187*22dc650dSSadaf Ebrahimi  if [ $? -ne 0 ] ; then
188*22dc650dSSadaf Ebrahimi    echo "** pcre2test $1 failed - check testtry"
189*22dc650dSSadaf Ebrahimi    exit 1
190*22dc650dSSadaf Ebrahimi  fi
191*22dc650dSSadaf Ebrahimi  }
192*22dc650dSSadaf Ebrahimi
193*22dc650dSSadaf Ebrahimi
194*22dc650dSSadaf Ebrahimi# ------ Special EBCDIC Test -------
195*22dc650dSSadaf Ebrahimi
196*22dc650dSSadaf Ebrahimiif [ $# -eq 1 -a "$1" = "ebcdic" ]; then
197*22dc650dSSadaf Ebrahimi  $valgrind ./pcre2test -C ebcdic >/dev/null
198*22dc650dSSadaf Ebrahimi  ebcdic=$?
199*22dc650dSSadaf Ebrahimi  if [ $ebcdic -ne 1 ] ; then
200*22dc650dSSadaf Ebrahimi    echo "Cannot run EBCDIC tests: EBCDIC support not compiled"
201*22dc650dSSadaf Ebrahimi    exit 1
202*22dc650dSSadaf Ebrahimi  fi
203*22dc650dSSadaf Ebrahimi  for opt in "" "-dfa"; do
204*22dc650dSSadaf Ebrahimi    ./pcre2test -q $opt $testdata/testinputEBC >testtry
205*22dc650dSSadaf Ebrahimi    checkresult $? EBC "$opt"
206*22dc650dSSadaf Ebrahimi  done
207*22dc650dSSadaf Ebrahimiexit 0
208*22dc650dSSadaf Ebrahimifi
209*22dc650dSSadaf Ebrahimi
210*22dc650dSSadaf Ebrahimi
211*22dc650dSSadaf Ebrahimi# ------ Normal Tests ------
212*22dc650dSSadaf Ebrahimi
213*22dc650dSSadaf Ebrahimi# Default values
214*22dc650dSSadaf Ebrahimi
215*22dc650dSSadaf Ebrahimiarg8=
216*22dc650dSSadaf Ebrahimiarg16=
217*22dc650dSSadaf Ebrahimiarg32=
218*22dc650dSSadaf Ebrahiminojit=
219*22dc650dSSadaf Ebrahimibigstack=
220*22dc650dSSadaf Ebrahimisim=
221*22dc650dSSadaf Ebrahimiskip=
222*22dc650dSSadaf Ebrahimivalgrind=
223*22dc650dSSadaf Ebrahimivjs=
224*22dc650dSSadaf Ebrahimi
225*22dc650dSSadaf Ebrahimi# This is in case the caller has set aliases (as I do - PH)
226*22dc650dSSadaf Ebrahimiunset cp ls mv rm
227*22dc650dSSadaf Ebrahimi
228*22dc650dSSadaf Ebrahimi# Process options and select which tests to run; for those that are explicitly
229*22dc650dSSadaf Ebrahimi# requested, check that the necessary optional facilities are available.
230*22dc650dSSadaf Ebrahimi
231*22dc650dSSadaf Ebrahimido0=no
232*22dc650dSSadaf Ebrahimido1=no
233*22dc650dSSadaf Ebrahimido2=no
234*22dc650dSSadaf Ebrahimido3=no
235*22dc650dSSadaf Ebrahimido4=no
236*22dc650dSSadaf Ebrahimido5=no
237*22dc650dSSadaf Ebrahimido6=no
238*22dc650dSSadaf Ebrahimido7=no
239*22dc650dSSadaf Ebrahimido8=no
240*22dc650dSSadaf Ebrahimido9=no
241*22dc650dSSadaf Ebrahimido10=no
242*22dc650dSSadaf Ebrahimido11=no
243*22dc650dSSadaf Ebrahimido12=no
244*22dc650dSSadaf Ebrahimido13=no
245*22dc650dSSadaf Ebrahimido14=no
246*22dc650dSSadaf Ebrahimido15=no
247*22dc650dSSadaf Ebrahimido16=no
248*22dc650dSSadaf Ebrahimido17=no
249*22dc650dSSadaf Ebrahimido18=no
250*22dc650dSSadaf Ebrahimido19=no
251*22dc650dSSadaf Ebrahimido20=no
252*22dc650dSSadaf Ebrahimido21=no
253*22dc650dSSadaf Ebrahimido22=no
254*22dc650dSSadaf Ebrahimido23=no
255*22dc650dSSadaf Ebrahimido24=no
256*22dc650dSSadaf Ebrahimido25=no
257*22dc650dSSadaf Ebrahimido26=no
258*22dc650dSSadaf Ebrahimidoheap=no
259*22dc650dSSadaf Ebrahimi
260*22dc650dSSadaf Ebrahimiwhile [ $# -gt 0 ] ; do
261*22dc650dSSadaf Ebrahimi  case $1 in
262*22dc650dSSadaf Ebrahimi    0) do0=yes;;
263*22dc650dSSadaf Ebrahimi    1) do1=yes;;
264*22dc650dSSadaf Ebrahimi    2) do2=yes;;
265*22dc650dSSadaf Ebrahimi    3) do3=yes;;
266*22dc650dSSadaf Ebrahimi    4) do4=yes;;
267*22dc650dSSadaf Ebrahimi    5) do5=yes;;
268*22dc650dSSadaf Ebrahimi    6) do6=yes;;
269*22dc650dSSadaf Ebrahimi    7) do7=yes;;
270*22dc650dSSadaf Ebrahimi    8) do8=yes;;
271*22dc650dSSadaf Ebrahimi    9) do9=yes;;
272*22dc650dSSadaf Ebrahimi   10) do10=yes;;
273*22dc650dSSadaf Ebrahimi   11) do11=yes;;
274*22dc650dSSadaf Ebrahimi   12) do12=yes;;
275*22dc650dSSadaf Ebrahimi   13) do13=yes;;
276*22dc650dSSadaf Ebrahimi   14) do14=yes;;
277*22dc650dSSadaf Ebrahimi   15) do15=yes;;
278*22dc650dSSadaf Ebrahimi   16) do16=yes;;
279*22dc650dSSadaf Ebrahimi   17) do17=yes;;
280*22dc650dSSadaf Ebrahimi   18) do18=yes;;
281*22dc650dSSadaf Ebrahimi   19) do19=yes;;
282*22dc650dSSadaf Ebrahimi   20) do20=yes;;
283*22dc650dSSadaf Ebrahimi   21) do21=yes;;
284*22dc650dSSadaf Ebrahimi   22) do22=yes;;
285*22dc650dSSadaf Ebrahimi   23) do23=yes;;
286*22dc650dSSadaf Ebrahimi   24) do24=yes;;
287*22dc650dSSadaf Ebrahimi   25) do25=yes;;
288*22dc650dSSadaf Ebrahimi   26) do26=yes;;
289*22dc650dSSadaf Ebrahimi heap) doheap=yes;;
290*22dc650dSSadaf Ebrahimi   -8) arg8=yes;;
291*22dc650dSSadaf Ebrahimi  -16) arg16=yes;;
292*22dc650dSSadaf Ebrahimi  -32) arg32=yes;;
293*22dc650dSSadaf Ebrahimi   bigstack|-bigstack) bigstack=yes;;
294*22dc650dSSadaf Ebrahimi   nojit|-nojit) nojit=yes;;
295*22dc650dSSadaf Ebrahimi   sim|-sim) shift; sim=$1;;
296*22dc650dSSadaf Ebrahimi   valgrind|-valgrind) valgrind="valgrind --tool=memcheck -q --smc-check=all-non-file";;
297*22dc650dSSadaf Ebrahimi   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 ";;
298*22dc650dSSadaf Ebrahimi   ~*)
299*22dc650dSSadaf Ebrahimi     if expr "$1" : '~[0-9][0-9]*$' >/dev/null; then
300*22dc650dSSadaf Ebrahimi       skip="$skip `expr "$1" : '~\([0-9]*\)*$'`"
301*22dc650dSSadaf Ebrahimi     else
302*22dc650dSSadaf Ebrahimi       echo "Unknown option or test selector '$1'"; exit 1
303*22dc650dSSadaf Ebrahimi     fi
304*22dc650dSSadaf Ebrahimi   ;;
305*22dc650dSSadaf Ebrahimi   *-*)
306*22dc650dSSadaf Ebrahimi     if expr "$1" : '[0-9][0-9]*-[0-9]*$' >/dev/null; then
307*22dc650dSSadaf Ebrahimi       tf=`expr "$1" : '\([0-9]*\)'`
308*22dc650dSSadaf Ebrahimi       tt=`expr "$1" : '.*-\([0-9]*\)'`
309*22dc650dSSadaf Ebrahimi       if [ "$tt" = "" ] ; then tt=$maxtest; fi
310*22dc650dSSadaf Ebrahimi       if expr \( "$tt" ">" "$maxtest" \) >/dev/null; then
311*22dc650dSSadaf Ebrahimi         echo "Invalid test range '$1'"; exit 1
312*22dc650dSSadaf Ebrahimi       fi
313*22dc650dSSadaf Ebrahimi       while expr "$tf" "<=" "$tt" >/dev/null; do
314*22dc650dSSadaf Ebrahimi         eval do${tf}=yes
315*22dc650dSSadaf Ebrahimi         tf=`expr $tf + 1`
316*22dc650dSSadaf Ebrahimi       done
317*22dc650dSSadaf Ebrahimi     else
318*22dc650dSSadaf Ebrahimi       echo "Invalid test range '$1'"; exit 1
319*22dc650dSSadaf Ebrahimi     fi
320*22dc650dSSadaf Ebrahimi   ;;
321*22dc650dSSadaf Ebrahimi   *) echo "Unknown option or test selector '$1'"; exit 1;;
322*22dc650dSSadaf Ebrahimi  esac
323*22dc650dSSadaf Ebrahimi  shift
324*22dc650dSSadaf Ebrahimidone
325*22dc650dSSadaf Ebrahimi
326*22dc650dSSadaf Ebrahimi# Find which optional facilities are available.
327*22dc650dSSadaf Ebrahimi
328*22dc650dSSadaf Ebrahimi$sim ./pcre2test -C linksize >/dev/null
329*22dc650dSSadaf Ebrahimilink_size=$?
330*22dc650dSSadaf Ebrahimiif [ $link_size -lt 2 ] ; then
331*22dc650dSSadaf Ebrahimi  echo "RunTest: Failed to find internal link size"
332*22dc650dSSadaf Ebrahimi  exit 1
333*22dc650dSSadaf Ebrahimifi
334*22dc650dSSadaf Ebrahimiif [ $link_size -gt 4 ] ; then
335*22dc650dSSadaf Ebrahimi  echo "RunTest: Failed to find internal link size"
336*22dc650dSSadaf Ebrahimi  exit 1
337*22dc650dSSadaf Ebrahimifi
338*22dc650dSSadaf Ebrahimi
339*22dc650dSSadaf Ebrahimi# If it is possible to set the system stack size and -bigstack was given,
340*22dc650dSSadaf Ebrahimi# set up a large stack.
341*22dc650dSSadaf Ebrahimi
342*22dc650dSSadaf Ebrahimi$sim ./pcre2test -S 64 /dev/null /dev/null
343*22dc650dSSadaf Ebrahimisupport_setstack=$?
344*22dc650dSSadaf Ebrahimiif [ $support_setstack -eq 0 -a "$bigstack" != "" ] ; then
345*22dc650dSSadaf Ebrahimi  setstack="-S 64"
346*22dc650dSSadaf Ebrahimielse
347*22dc650dSSadaf Ebrahimi  setstack=""
348*22dc650dSSadaf Ebrahimifi
349*22dc650dSSadaf Ebrahimi
350*22dc650dSSadaf Ebrahimi# All of 8-bit, 16-bit, and 32-bit character strings may be supported, but only
351*22dc650dSSadaf Ebrahimi# one need be.
352*22dc650dSSadaf Ebrahimi
353*22dc650dSSadaf Ebrahimi$sim ./pcre2test -C pcre2-8 >/dev/null
354*22dc650dSSadaf Ebrahimisupport8=$?
355*22dc650dSSadaf Ebrahimi$sim ./pcre2test -C pcre2-16 >/dev/null
356*22dc650dSSadaf Ebrahimisupport16=$?
357*22dc650dSSadaf Ebrahimi$sim ./pcre2test -C pcre2-32 >/dev/null
358*22dc650dSSadaf Ebrahimisupport32=$?
359*22dc650dSSadaf Ebrahimi
360*22dc650dSSadaf Ebrahimi# \C may be disabled
361*22dc650dSSadaf Ebrahimi
362*22dc650dSSadaf Ebrahimi$sim ./pcre2test -C backslash-C >/dev/null
363*22dc650dSSadaf EbrahimisupportBSC=$?
364*22dc650dSSadaf Ebrahimi
365*22dc650dSSadaf Ebrahimi# Initialize all bitsizes skipped
366*22dc650dSSadaf Ebrahimi
367*22dc650dSSadaf Ebrahimitest8=skip
368*22dc650dSSadaf Ebrahimitest16=skip
369*22dc650dSSadaf Ebrahimitest32=skip
370*22dc650dSSadaf Ebrahimi
371*22dc650dSSadaf Ebrahimi# If no bitsize arguments, select all that are available
372*22dc650dSSadaf Ebrahimi
373*22dc650dSSadaf Ebrahimiif [ "$arg8$arg16$arg32" = "" ] ; then
374*22dc650dSSadaf Ebrahimi  if [ $support8 -ne 0 ] ; then
375*22dc650dSSadaf Ebrahimi    test8=-8
376*22dc650dSSadaf Ebrahimi  fi
377*22dc650dSSadaf Ebrahimi  if [ $support16 -ne 0 ] ; then
378*22dc650dSSadaf Ebrahimi    test16=-16
379*22dc650dSSadaf Ebrahimi  fi
380*22dc650dSSadaf Ebrahimi  if [ $support32 -ne 0 ] ; then
381*22dc650dSSadaf Ebrahimi    test32=-32
382*22dc650dSSadaf Ebrahimi  fi
383*22dc650dSSadaf Ebrahimi
384*22dc650dSSadaf Ebrahimi# Otherwise, select requested bit sizes
385*22dc650dSSadaf Ebrahimi
386*22dc650dSSadaf Ebrahimielse
387*22dc650dSSadaf Ebrahimi  if [ "$arg8" = yes ] ; then
388*22dc650dSSadaf Ebrahimi    if [ $support8 -eq 0 ] ; then
389*22dc650dSSadaf Ebrahimi      echo "Cannot run 8-bit library tests: 8-bit library not compiled"
390*22dc650dSSadaf Ebrahimi      exit 1
391*22dc650dSSadaf Ebrahimi    fi
392*22dc650dSSadaf Ebrahimi    test8=-8
393*22dc650dSSadaf Ebrahimi  fi
394*22dc650dSSadaf Ebrahimi  if [ "$arg16" = yes ] ; then
395*22dc650dSSadaf Ebrahimi    if [ $support16 -eq 0 ] ; then
396*22dc650dSSadaf Ebrahimi      echo "Cannot run 16-bit library tests: 16-bit library not compiled"
397*22dc650dSSadaf Ebrahimi      exit 1
398*22dc650dSSadaf Ebrahimi    fi
399*22dc650dSSadaf Ebrahimi    test16=-16
400*22dc650dSSadaf Ebrahimi  fi
401*22dc650dSSadaf Ebrahimi  if [ "$arg32" = yes ] ; then
402*22dc650dSSadaf Ebrahimi    if [ $support32 -eq 0 ] ; then
403*22dc650dSSadaf Ebrahimi      echo "Cannot run 32-bit library tests: 32-bit library not compiled"
404*22dc650dSSadaf Ebrahimi      exit 1
405*22dc650dSSadaf Ebrahimi    fi
406*22dc650dSSadaf Ebrahimi    test32=-32
407*22dc650dSSadaf Ebrahimi  fi
408*22dc650dSSadaf Ebrahimifi
409*22dc650dSSadaf Ebrahimi
410*22dc650dSSadaf Ebrahimi# UTF support is implied by Unicode support, and it always applies to all bit
411*22dc650dSSadaf Ebrahimi# sizes if both are supported; we can't have UTF-8 support without UTF-16 or
412*22dc650dSSadaf Ebrahimi# UTF-32 support.
413*22dc650dSSadaf Ebrahimi
414*22dc650dSSadaf Ebrahimi$sim ./pcre2test -C unicode >/dev/null
415*22dc650dSSadaf Ebrahimiutf=$?
416*22dc650dSSadaf Ebrahimi
417*22dc650dSSadaf Ebrahimi# When JIT is used with valgrind, we need to set up valgrind suppressions as
418*22dc650dSSadaf Ebrahimi# otherwise there are a lot of false positive valgrind reports when the
419*22dc650dSSadaf Ebrahimi# the hardware supports SSE2.
420*22dc650dSSadaf Ebrahimi
421*22dc650dSSadaf Ebrahimijitopt=
422*22dc650dSSadaf Ebrahimi$sim ./pcre2test -C jit >/dev/null
423*22dc650dSSadaf Ebrahimijit=$?
424*22dc650dSSadaf Ebrahimiif [ $jit -ne 0 -a "$nojit" != "yes" ] ; then
425*22dc650dSSadaf Ebrahimi  jitopt=-jit
426*22dc650dSSadaf Ebrahimi  if [ "$valgrind" != "" ] ; then
427*22dc650dSSadaf Ebrahimi    vjs="--suppressions=$testdata/valgrind-jit.supp"
428*22dc650dSSadaf Ebrahimi  fi
429*22dc650dSSadaf Ebrahimifi
430*22dc650dSSadaf Ebrahimi
431*22dc650dSSadaf Ebrahimi# If no specific tests were requested, select all the numbered tests. Those
432*22dc650dSSadaf Ebrahimi# that are not relevant will be automatically skipped.
433*22dc650dSSadaf Ebrahimi
434*22dc650dSSadaf Ebrahimiif [ $do0  = no -a $do1  = no -a $do2  = no -a $do3  = no -a \
435*22dc650dSSadaf Ebrahimi     $do4  = no -a $do5  = no -a $do6  = no -a $do7  = no -a \
436*22dc650dSSadaf Ebrahimi     $do8  = no -a $do9  = no -a $do10 = no -a $do11 = no -a \
437*22dc650dSSadaf Ebrahimi     $do12 = no -a $do13 = no -a $do14 = no -a $do15 = no -a \
438*22dc650dSSadaf Ebrahimi     $do16 = no -a $do17 = no -a $do18 = no -a $do19 = no -a \
439*22dc650dSSadaf Ebrahimi     $do20 = no -a $do21 = no -a $do22 = no -a $do23 = no -a \
440*22dc650dSSadaf Ebrahimi     $do24 = no -a $do25 = no -a $do26 = no -a $doheap = no \
441*22dc650dSSadaf Ebrahimi   ]; then
442*22dc650dSSadaf Ebrahimi  do0=yes
443*22dc650dSSadaf Ebrahimi  do1=yes
444*22dc650dSSadaf Ebrahimi  do2=yes
445*22dc650dSSadaf Ebrahimi  do3=yes
446*22dc650dSSadaf Ebrahimi  do4=yes
447*22dc650dSSadaf Ebrahimi  do5=yes
448*22dc650dSSadaf Ebrahimi  do6=yes
449*22dc650dSSadaf Ebrahimi  do7=yes
450*22dc650dSSadaf Ebrahimi  do8=yes
451*22dc650dSSadaf Ebrahimi  do9=yes
452*22dc650dSSadaf Ebrahimi  do10=yes
453*22dc650dSSadaf Ebrahimi  do11=yes
454*22dc650dSSadaf Ebrahimi  do12=yes
455*22dc650dSSadaf Ebrahimi  do13=yes
456*22dc650dSSadaf Ebrahimi  do14=yes
457*22dc650dSSadaf Ebrahimi  do15=yes
458*22dc650dSSadaf Ebrahimi  do16=yes
459*22dc650dSSadaf Ebrahimi  do17=yes
460*22dc650dSSadaf Ebrahimi  do18=yes
461*22dc650dSSadaf Ebrahimi  do19=yes
462*22dc650dSSadaf Ebrahimi  do20=yes
463*22dc650dSSadaf Ebrahimi  do21=yes
464*22dc650dSSadaf Ebrahimi  do22=yes
465*22dc650dSSadaf Ebrahimi  do23=yes
466*22dc650dSSadaf Ebrahimi  do24=yes
467*22dc650dSSadaf Ebrahimi  do25=yes
468*22dc650dSSadaf Ebrahimi  do26=yes
469*22dc650dSSadaf Ebrahimifi
470*22dc650dSSadaf Ebrahimi
471*22dc650dSSadaf Ebrahimi# Handle any explicit skips at this stage, so that an argument list may consist
472*22dc650dSSadaf Ebrahimi# only of explicit skips.
473*22dc650dSSadaf Ebrahimi
474*22dc650dSSadaf Ebrahimifor i in $skip; do eval do$i=no; done
475*22dc650dSSadaf Ebrahimi
476*22dc650dSSadaf Ebrahimi# Show which release and which test data
477*22dc650dSSadaf Ebrahimi
478*22dc650dSSadaf Ebrahimiecho ""
479*22dc650dSSadaf Ebrahimiecho PCRE2 C library tests using test data from $testdata
480*22dc650dSSadaf Ebrahimi$sim ./pcre2test /dev/null
481*22dc650dSSadaf Ebrahimiecho ""
482*22dc650dSSadaf Ebrahimi
483*22dc650dSSadaf Ebrahimifor bmode in "$test8" "$test16" "$test32"; do
484*22dc650dSSadaf Ebrahimi  case "$bmode" in
485*22dc650dSSadaf Ebrahimi    skip) continue;;
486*22dc650dSSadaf Ebrahimi    -16)  if [ "$test8$test32" != "skipskip" ] ; then echo ""; fi
487*22dc650dSSadaf Ebrahimi          bits=16; echo "---- Testing 16-bit library ----"; echo "";;
488*22dc650dSSadaf Ebrahimi    -32)  if [ "$test8$test16" != "skipskip" ] ; then echo ""; fi
489*22dc650dSSadaf Ebrahimi          bits=32; echo "---- Testing 32-bit library ----"; echo "";;
490*22dc650dSSadaf Ebrahimi    -8)   bits=8; echo "---- Testing 8-bit library ----"; echo "";;
491*22dc650dSSadaf Ebrahimi  esac
492*22dc650dSSadaf Ebrahimi
493*22dc650dSSadaf Ebrahimi  # Test 0 is a special test. Its output is not checked, because it will
494*22dc650dSSadaf Ebrahimi  # be different on different hardware and with different configurations.
495*22dc650dSSadaf Ebrahimi  # Running this test just exercises the code.
496*22dc650dSSadaf Ebrahimi
497*22dc650dSSadaf Ebrahimi  if [ $do0 = yes ] ; then
498*22dc650dSSadaf Ebrahimi    echo $title0
499*22dc650dSSadaf Ebrahimi    echo '/abc/jit,memory,framesize' >testSinput
500*22dc650dSSadaf Ebrahimi    echo '   abc' >>testSinput
501*22dc650dSSadaf Ebrahimi    echo '' >testtry
502*22dc650dSSadaf Ebrahimi    checkspecial '-C'
503*22dc650dSSadaf Ebrahimi    checkspecial '--help'
504*22dc650dSSadaf Ebrahimi    if [ $support_setstack -eq 0 ] ; then
505*22dc650dSSadaf Ebrahimi      checkspecial '-S 1 -t 10 testSinput'
506*22dc650dSSadaf Ebrahimi    fi
507*22dc650dSSadaf Ebrahimi    echo "  OK"
508*22dc650dSSadaf Ebrahimi  fi
509*22dc650dSSadaf Ebrahimi
510*22dc650dSSadaf Ebrahimi  # Primary non-UTF test, compatible with JIT and all versions of Perl >= 5.8
511*22dc650dSSadaf Ebrahimi
512*22dc650dSSadaf Ebrahimi  if [ $do1 = yes ] ; then
513*22dc650dSSadaf Ebrahimi    echo $title1
514*22dc650dSSadaf Ebrahimi    for opt in "" $jitopt; do
515*22dc650dSSadaf Ebrahimi      $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput1 testtry
516*22dc650dSSadaf Ebrahimi      checkresult $? 1 "$opt"
517*22dc650dSSadaf Ebrahimi    done
518*22dc650dSSadaf Ebrahimi  fi
519*22dc650dSSadaf Ebrahimi
520*22dc650dSSadaf Ebrahimi  # PCRE2 tests that are not Perl-compatible: API, errors, internals. We copy
521*22dc650dSSadaf Ebrahimi  # the testbtables file to the current directory for use by this test.
522*22dc650dSSadaf Ebrahimi
523*22dc650dSSadaf Ebrahimi  if [ $do2 = yes ] ; then
524*22dc650dSSadaf Ebrahimi    echo $title2 "(excluding UTF-$bits)"
525*22dc650dSSadaf Ebrahimi    cp $testdata/testbtables .
526*22dc650dSSadaf Ebrahimi    for opt in "" $jitopt; do
527*22dc650dSSadaf Ebrahimi      $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput2 testtry
528*22dc650dSSadaf Ebrahimi      saverc=$?
529*22dc650dSSadaf Ebrahimi      if [ $saverc = 0 ] ; then
530*22dc650dSSadaf Ebrahimi        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $bmode $opt -error -70,-62,-2,-1,0,100,101,191,300 >>testtry
531*22dc650dSSadaf Ebrahimi        checkresult $? 2 "$opt"
532*22dc650dSSadaf Ebrahimi      else
533*22dc650dSSadaf Ebrahimi        checkresult $saverc 2 "$opt"
534*22dc650dSSadaf Ebrahimi      fi
535*22dc650dSSadaf Ebrahimi    done
536*22dc650dSSadaf Ebrahimi  fi
537*22dc650dSSadaf Ebrahimi
538*22dc650dSSadaf Ebrahimi  # Locale-specific tests, provided that either the "fr_FR", "fr_CA", "french"
539*22dc650dSSadaf Ebrahimi  # or "fr" locale is available. The first two are Unix-like standards; the
540*22dc650dSSadaf Ebrahimi  # last two are for Windows. Unfortunately, different versions of the French
541*22dc650dSSadaf Ebrahimi  # locale give different outputs for some items. This test passes if the
542*22dc650dSSadaf Ebrahimi  # output matches any one of the alternative output files.
543*22dc650dSSadaf Ebrahimi
544*22dc650dSSadaf Ebrahimi  if [ $do3 = yes ] ; then
545*22dc650dSSadaf Ebrahimi    locale=
546*22dc650dSSadaf Ebrahimi
547*22dc650dSSadaf Ebrahimi    # In some environments locales that are listed by the "locale -a"
548*22dc650dSSadaf Ebrahimi    # command do not seem to work with setlocale(). Therefore, we do
549*22dc650dSSadaf Ebrahimi    # a preliminary test to see if pcre2test can set one before going
550*22dc650dSSadaf Ebrahimi    # on to use it.
551*22dc650dSSadaf Ebrahimi
552*22dc650dSSadaf Ebrahimi    for loc in 'fr_FR' 'french' 'fr' 'fr_CA'; do
553*22dc650dSSadaf Ebrahimi      locale -a | grep "^$loc\$" >/dev/null
554*22dc650dSSadaf Ebrahimi      if [ $? -eq 0 ] ; then
555*22dc650dSSadaf Ebrahimi        echo "/a/locale=$loc" | \
556*22dc650dSSadaf Ebrahimi          $sim $valgrind ./pcre2test -q $bmode | \
557*22dc650dSSadaf Ebrahimi            grep "Failed to set locale" >/dev/null
558*22dc650dSSadaf Ebrahimi        if [ $? -ne 0 ] ; then
559*22dc650dSSadaf Ebrahimi          locale=$loc
560*22dc650dSSadaf Ebrahimi          if [ "$locale" = "fr_FR" ] ; then
561*22dc650dSSadaf Ebrahimi            infile=$testdata/testinput3
562*22dc650dSSadaf Ebrahimi            outfile=$testdata/testoutput3
563*22dc650dSSadaf Ebrahimi            outfile2=$testdata/testoutput3A
564*22dc650dSSadaf Ebrahimi            outfile3=$testdata/testoutput3B
565*22dc650dSSadaf Ebrahimi          else
566*22dc650dSSadaf Ebrahimi            infile=test3input
567*22dc650dSSadaf Ebrahimi            outfile=test3output
568*22dc650dSSadaf Ebrahimi            outfile2=test3outputA
569*22dc650dSSadaf Ebrahimi            outfile3=test3outputB
570*22dc650dSSadaf Ebrahimi            sed "s/fr_FR/$loc/" $testdata/testinput3 >test3input
571*22dc650dSSadaf Ebrahimi            sed "s/fr_FR/$loc/" $testdata/testoutput3 >test3output
572*22dc650dSSadaf Ebrahimi            sed "s/fr_FR/$loc/" $testdata/testoutput3A >test3outputA
573*22dc650dSSadaf Ebrahimi            sed "s/fr_FR/$loc/" $testdata/testoutput3B >test3outputB
574*22dc650dSSadaf Ebrahimi          fi
575*22dc650dSSadaf Ebrahimi          break
576*22dc650dSSadaf Ebrahimi        fi
577*22dc650dSSadaf Ebrahimi      fi
578*22dc650dSSadaf Ebrahimi    done
579*22dc650dSSadaf Ebrahimi
580*22dc650dSSadaf Ebrahimi    if [ "$locale" != "" ] ; then
581*22dc650dSSadaf Ebrahimi      echo $title3 "(using '$locale' locale)"
582*22dc650dSSadaf Ebrahimi      for opt in "" $jitopt; do
583*22dc650dSSadaf Ebrahimi        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $infile testtry
584*22dc650dSSadaf Ebrahimi        if [ $? = 0 ] ; then
585*22dc650dSSadaf Ebrahimi          case "$opt" in
586*22dc650dSSadaf Ebrahimi            -jit) with=" with JIT";;
587*22dc650dSSadaf Ebrahimi            *)    with="";;
588*22dc650dSSadaf Ebrahimi          esac
589*22dc650dSSadaf Ebrahimi          if $cf $outfile testtry >teststdout || \
590*22dc650dSSadaf Ebrahimi             $cf $outfile2 testtry >teststdout || \
591*22dc650dSSadaf Ebrahimi             $cf $outfile3 testtry >teststdout
592*22dc650dSSadaf Ebrahimi          then
593*22dc650dSSadaf Ebrahimi            echo "  OK$with"
594*22dc650dSSadaf Ebrahimi          else
595*22dc650dSSadaf Ebrahimi            echo "** Locale test did not run successfully$with. The output did not match"
596*22dc650dSSadaf Ebrahimi            echo "   $outfile, $outfile2 or $outfile3."
597*22dc650dSSadaf Ebrahimi            echo "   This may mean that there is a problem with the locale settings rather"
598*22dc650dSSadaf Ebrahimi            echo "   than a bug in PCRE2."
599*22dc650dSSadaf Ebrahimi            exit 1
600*22dc650dSSadaf Ebrahimi          fi
601*22dc650dSSadaf Ebrahimi        else exit 1
602*22dc650dSSadaf Ebrahimi        fi
603*22dc650dSSadaf Ebrahimi      done
604*22dc650dSSadaf Ebrahimi    else
605*22dc650dSSadaf Ebrahimi      echo "Cannot test locale-specific features - none of the 'fr_FR', 'fr_CA',"
606*22dc650dSSadaf Ebrahimi      echo "'fr' or 'french' locales can be set, or the \"locale\" command is"
607*22dc650dSSadaf Ebrahimi      echo "not available to check for them."
608*22dc650dSSadaf Ebrahimi      echo " "
609*22dc650dSSadaf Ebrahimi    fi
610*22dc650dSSadaf Ebrahimi  fi
611*22dc650dSSadaf Ebrahimi
612*22dc650dSSadaf Ebrahimi  # Tests for UTF and Unicode property support
613*22dc650dSSadaf Ebrahimi
614*22dc650dSSadaf Ebrahimi  if [ $do4 = yes ] ; then
615*22dc650dSSadaf Ebrahimi    echo ${title4A}-${bits}${title4B}
616*22dc650dSSadaf Ebrahimi    if [ $utf -eq 0 ] ; then
617*22dc650dSSadaf Ebrahimi      echo "  Skipped because UTF-$bits support is not available"
618*22dc650dSSadaf Ebrahimi    else
619*22dc650dSSadaf Ebrahimi      for opt in "" $jitopt; do
620*22dc650dSSadaf Ebrahimi        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput4 testtry
621*22dc650dSSadaf Ebrahimi        checkresult $? 4 "$opt"
622*22dc650dSSadaf Ebrahimi      done
623*22dc650dSSadaf Ebrahimi    fi
624*22dc650dSSadaf Ebrahimi  fi
625*22dc650dSSadaf Ebrahimi
626*22dc650dSSadaf Ebrahimi  if [ $do5 = yes ] ; then
627*22dc650dSSadaf Ebrahimi    echo ${title5A}-${bits}$title5B
628*22dc650dSSadaf Ebrahimi    if [ $utf -eq 0 ] ; then
629*22dc650dSSadaf Ebrahimi      echo "  Skipped because UTF-$bits support is not available"
630*22dc650dSSadaf Ebrahimi    else
631*22dc650dSSadaf Ebrahimi      for opt in "" $jitopt; do
632*22dc650dSSadaf Ebrahimi        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput5 testtry
633*22dc650dSSadaf Ebrahimi        checkresult $? 5 "$opt"
634*22dc650dSSadaf Ebrahimi      done
635*22dc650dSSadaf Ebrahimi    fi
636*22dc650dSSadaf Ebrahimi  fi
637*22dc650dSSadaf Ebrahimi
638*22dc650dSSadaf Ebrahimi  # Tests for DFA matching support
639*22dc650dSSadaf Ebrahimi
640*22dc650dSSadaf Ebrahimi  if [ $do6 = yes ] ; then
641*22dc650dSSadaf Ebrahimi    echo $title6
642*22dc650dSSadaf Ebrahimi    $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput6 testtry
643*22dc650dSSadaf Ebrahimi    checkresult $? 6 ""
644*22dc650dSSadaf Ebrahimi  fi
645*22dc650dSSadaf Ebrahimi
646*22dc650dSSadaf Ebrahimi  if [ $do7 = yes ] ; then
647*22dc650dSSadaf Ebrahimi    echo ${title7A}-${bits}$title7B
648*22dc650dSSadaf Ebrahimi    if [ $utf -eq 0 ] ; then
649*22dc650dSSadaf Ebrahimi      echo "  Skipped because UTF-$bits support is not available"
650*22dc650dSSadaf Ebrahimi    else
651*22dc650dSSadaf Ebrahimi      $sim $valgrind ./pcre2test -q $setstack $bmode $opt $testdata/testinput7 testtry
652*22dc650dSSadaf Ebrahimi      checkresult $? 7 ""
653*22dc650dSSadaf Ebrahimi    fi
654*22dc650dSSadaf Ebrahimi  fi
655*22dc650dSSadaf Ebrahimi
656*22dc650dSSadaf Ebrahimi  # Test of internal offsets and code sizes. This test is run only when there
657*22dc650dSSadaf Ebrahimi  # is UTF/UCP support. The actual tests are mostly the same as in some of the
658*22dc650dSSadaf Ebrahimi  # above, but in this test we inspect some offsets and sizes. This is a
659*22dc650dSSadaf Ebrahimi  # doublecheck for the maintainer, just in case something changes unexpectedly.
660*22dc650dSSadaf Ebrahimi  # The output from this test is different in 8-bit, 16-bit, and 32-bit modes
661*22dc650dSSadaf Ebrahimi  # and for different link sizes, so there are different output files for each
662*22dc650dSSadaf Ebrahimi  # mode and link size.
663*22dc650dSSadaf Ebrahimi
664*22dc650dSSadaf Ebrahimi  if [ $do8 = yes ] ; then
665*22dc650dSSadaf Ebrahimi    echo $title8
666*22dc650dSSadaf Ebrahimi    if [ $utf -eq 0 ] ; then
667*22dc650dSSadaf Ebrahimi      echo "  Skipped because UTF-$bits support is not available"
668*22dc650dSSadaf Ebrahimi    else
669*22dc650dSSadaf Ebrahimi      $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput8 testtry
670*22dc650dSSadaf Ebrahimi      checkresult $? 8-$bits-$link_size ""
671*22dc650dSSadaf Ebrahimi    fi
672*22dc650dSSadaf Ebrahimi  fi
673*22dc650dSSadaf Ebrahimi
674*22dc650dSSadaf Ebrahimi  # Tests for 8-bit-specific features
675*22dc650dSSadaf Ebrahimi
676*22dc650dSSadaf Ebrahimi  if [ "$do9" = yes ] ; then
677*22dc650dSSadaf Ebrahimi    echo $title9
678*22dc650dSSadaf Ebrahimi    if [ "$bits" = "16" -o "$bits" = "32" ] ; then
679*22dc650dSSadaf Ebrahimi      echo "  Skipped when running 16/32-bit tests"
680*22dc650dSSadaf Ebrahimi    else
681*22dc650dSSadaf Ebrahimi      for opt in "" $jitopt; do
682*22dc650dSSadaf Ebrahimi        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput9 testtry
683*22dc650dSSadaf Ebrahimi        checkresult $? 9 "$opt"
684*22dc650dSSadaf Ebrahimi      done
685*22dc650dSSadaf Ebrahimi    fi
686*22dc650dSSadaf Ebrahimi  fi
687*22dc650dSSadaf Ebrahimi
688*22dc650dSSadaf Ebrahimi  # Tests for UTF-8 and UCP 8-bit-specific features
689*22dc650dSSadaf Ebrahimi
690*22dc650dSSadaf Ebrahimi  if [ "$do10" = yes ] ; then
691*22dc650dSSadaf Ebrahimi    echo $title10
692*22dc650dSSadaf Ebrahimi    if [ "$bits" = "16" -o "$bits" = "32" ] ; then
693*22dc650dSSadaf Ebrahimi      echo "  Skipped when running 16/32-bit tests"
694*22dc650dSSadaf Ebrahimi    elif [ $utf -eq 0 ] ; then
695*22dc650dSSadaf Ebrahimi      echo "  Skipped because UTF-$bits support is not available"
696*22dc650dSSadaf Ebrahimi    else
697*22dc650dSSadaf Ebrahimi      for opt in "" $jitopt; do
698*22dc650dSSadaf Ebrahimi        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput10 testtry
699*22dc650dSSadaf Ebrahimi        checkresult $? 10 "$opt"
700*22dc650dSSadaf Ebrahimi      done
701*22dc650dSSadaf Ebrahimi    fi
702*22dc650dSSadaf Ebrahimi  fi
703*22dc650dSSadaf Ebrahimi
704*22dc650dSSadaf Ebrahimi  # Tests for 16-bit and 32-bit features. Output is different for the two widths.
705*22dc650dSSadaf Ebrahimi
706*22dc650dSSadaf Ebrahimi  if [ $do11 = yes ] ; then
707*22dc650dSSadaf Ebrahimi    echo $title11
708*22dc650dSSadaf Ebrahimi    if [ "$bits" = "8" ] ; then
709*22dc650dSSadaf Ebrahimi      echo "  Skipped when running 8-bit tests"
710*22dc650dSSadaf Ebrahimi    else
711*22dc650dSSadaf Ebrahimi      for opt in "" $jitopt; do
712*22dc650dSSadaf Ebrahimi        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput11 testtry
713*22dc650dSSadaf Ebrahimi        checkresult $? 11-$bits "$opt"
714*22dc650dSSadaf Ebrahimi      done
715*22dc650dSSadaf Ebrahimi    fi
716*22dc650dSSadaf Ebrahimi  fi
717*22dc650dSSadaf Ebrahimi
718*22dc650dSSadaf Ebrahimi  # Tests for 16-bit and 32-bit features with UTF-16/32 and UCP support. Output
719*22dc650dSSadaf Ebrahimi  # is different for the two widths.
720*22dc650dSSadaf Ebrahimi
721*22dc650dSSadaf Ebrahimi  if [ $do12 = yes ] ; then
722*22dc650dSSadaf Ebrahimi    echo $title12
723*22dc650dSSadaf Ebrahimi    if [ "$bits" = "8" ] ; then
724*22dc650dSSadaf Ebrahimi      echo "  Skipped when running 8-bit tests"
725*22dc650dSSadaf Ebrahimi    elif [ $utf -eq 0 ] ; then
726*22dc650dSSadaf Ebrahimi      echo "  Skipped because UTF-$bits support is not available"
727*22dc650dSSadaf Ebrahimi    else
728*22dc650dSSadaf Ebrahimi      for opt in "" $jitopt; do
729*22dc650dSSadaf Ebrahimi        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput12 testtry
730*22dc650dSSadaf Ebrahimi        checkresult $? 12-$bits "$opt"
731*22dc650dSSadaf Ebrahimi      done
732*22dc650dSSadaf Ebrahimi    fi
733*22dc650dSSadaf Ebrahimi  fi
734*22dc650dSSadaf Ebrahimi
735*22dc650dSSadaf Ebrahimi  # Tests for 16/32-bit-specific features in DFA non-UTF modes
736*22dc650dSSadaf Ebrahimi
737*22dc650dSSadaf Ebrahimi  if [ $do13 = yes ] ; then
738*22dc650dSSadaf Ebrahimi    echo $title13
739*22dc650dSSadaf Ebrahimi    if [ "$bits" = "8" ] ; then
740*22dc650dSSadaf Ebrahimi      echo "  Skipped when running 8-bit tests"
741*22dc650dSSadaf Ebrahimi    else
742*22dc650dSSadaf Ebrahimi      $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput13 testtry
743*22dc650dSSadaf Ebrahimi      checkresult $? 13 ""
744*22dc650dSSadaf Ebrahimi    fi
745*22dc650dSSadaf Ebrahimi  fi
746*22dc650dSSadaf Ebrahimi
747*22dc650dSSadaf Ebrahimi  # Tests for DFA UTF and UCP features. Output is different for the different widths.
748*22dc650dSSadaf Ebrahimi
749*22dc650dSSadaf Ebrahimi  if [ $do14 = yes ] ; then
750*22dc650dSSadaf Ebrahimi    echo $title14
751*22dc650dSSadaf Ebrahimi    if [ $utf -eq 0 ] ; then
752*22dc650dSSadaf Ebrahimi      echo "  Skipped because UTF-$bits support is not available"
753*22dc650dSSadaf Ebrahimi    else
754*22dc650dSSadaf Ebrahimi      $sim $valgrind ./pcre2test -q $setstack $bmode $opt $testdata/testinput14 testtry
755*22dc650dSSadaf Ebrahimi      checkresult $? 14-$bits ""
756*22dc650dSSadaf Ebrahimi    fi
757*22dc650dSSadaf Ebrahimi  fi
758*22dc650dSSadaf Ebrahimi
759*22dc650dSSadaf Ebrahimi  # Test non-JIT match and recursion limits
760*22dc650dSSadaf Ebrahimi
761*22dc650dSSadaf Ebrahimi  if [ $do15 = yes ] ; then
762*22dc650dSSadaf Ebrahimi    echo $title15
763*22dc650dSSadaf Ebrahimi    $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput15 testtry
764*22dc650dSSadaf Ebrahimi    checkresult $? 15 ""
765*22dc650dSSadaf Ebrahimi  fi
766*22dc650dSSadaf Ebrahimi
767*22dc650dSSadaf Ebrahimi  # Test JIT-specific features when JIT is not available
768*22dc650dSSadaf Ebrahimi
769*22dc650dSSadaf Ebrahimi  if [ $do16 = yes ] ; then
770*22dc650dSSadaf Ebrahimi    echo $title16
771*22dc650dSSadaf Ebrahimi    if [ $jit -ne 0 ] ; then
772*22dc650dSSadaf Ebrahimi      echo "  Skipped because JIT is available"
773*22dc650dSSadaf Ebrahimi    else
774*22dc650dSSadaf Ebrahimi      $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput16 testtry
775*22dc650dSSadaf Ebrahimi      checkresult $? 16 ""
776*22dc650dSSadaf Ebrahimi    fi
777*22dc650dSSadaf Ebrahimi  fi
778*22dc650dSSadaf Ebrahimi
779*22dc650dSSadaf Ebrahimi  # Test JIT-specific features when JIT is available
780*22dc650dSSadaf Ebrahimi
781*22dc650dSSadaf Ebrahimi  if [ $do17 = yes ] ; then
782*22dc650dSSadaf Ebrahimi    echo $title17
783*22dc650dSSadaf Ebrahimi    if [ $jit -eq 0 -o "$nojit" = "yes" ] ; then
784*22dc650dSSadaf Ebrahimi      echo "  Skipped because JIT is not available or nojit was specified"
785*22dc650dSSadaf Ebrahimi    else
786*22dc650dSSadaf Ebrahimi      $sim $valgrind $vjs ./pcre2test -q $setstack $bmode $testdata/testinput17 testtry
787*22dc650dSSadaf Ebrahimi      checkresult $? 17 ""
788*22dc650dSSadaf Ebrahimi    fi
789*22dc650dSSadaf Ebrahimi  fi
790*22dc650dSSadaf Ebrahimi
791*22dc650dSSadaf Ebrahimi  # Tests for the POSIX interface without UTF/UCP (8-bit only)
792*22dc650dSSadaf Ebrahimi
793*22dc650dSSadaf Ebrahimi  if [ $do18 = yes ] ; then
794*22dc650dSSadaf Ebrahimi    echo $title18
795*22dc650dSSadaf Ebrahimi    if [ "$bits" = "16" -o "$bits" = "32" ] ; then
796*22dc650dSSadaf Ebrahimi      echo "  Skipped when running 16/32-bit tests"
797*22dc650dSSadaf Ebrahimi    else
798*22dc650dSSadaf Ebrahimi      $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput18 testtry
799*22dc650dSSadaf Ebrahimi      checkresult $? 18 ""
800*22dc650dSSadaf Ebrahimi    fi
801*22dc650dSSadaf Ebrahimi  fi
802*22dc650dSSadaf Ebrahimi
803*22dc650dSSadaf Ebrahimi  # Tests for the POSIX interface with UTF/UCP (8-bit only)
804*22dc650dSSadaf Ebrahimi
805*22dc650dSSadaf Ebrahimi  if [ $do19 = yes ] ; then
806*22dc650dSSadaf Ebrahimi    echo $title19
807*22dc650dSSadaf Ebrahimi    if [ "$bits" = "16" -o "$bits" = "32" ] ; then
808*22dc650dSSadaf Ebrahimi      echo "  Skipped when running 16/32-bit tests"
809*22dc650dSSadaf Ebrahimi    elif [ $utf -eq 0 ] ; then
810*22dc650dSSadaf Ebrahimi      echo "  Skipped because UTF-$bits support is not available"
811*22dc650dSSadaf Ebrahimi    else
812*22dc650dSSadaf Ebrahimi      $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput19 testtry
813*22dc650dSSadaf Ebrahimi      checkresult $? 19 ""
814*22dc650dSSadaf Ebrahimi    fi
815*22dc650dSSadaf Ebrahimi  fi
816*22dc650dSSadaf Ebrahimi
817*22dc650dSSadaf Ebrahimi  # Serialization tests
818*22dc650dSSadaf Ebrahimi
819*22dc650dSSadaf Ebrahimi  if [ $do20 = yes ] ; then
820*22dc650dSSadaf Ebrahimi    echo $title20
821*22dc650dSSadaf Ebrahimi    $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput20 testtry
822*22dc650dSSadaf Ebrahimi    checkresult $? 20 ""
823*22dc650dSSadaf Ebrahimi  fi
824*22dc650dSSadaf Ebrahimi
825*22dc650dSSadaf Ebrahimi  # \C tests without UTF - DFA matching is supported
826*22dc650dSSadaf Ebrahimi
827*22dc650dSSadaf Ebrahimi  if [ "$do21" = yes ] ; then
828*22dc650dSSadaf Ebrahimi    echo $title21
829*22dc650dSSadaf Ebrahimi    if [ $supportBSC -eq 0 ] ; then
830*22dc650dSSadaf Ebrahimi      echo "  Skipped because \C is disabled"
831*22dc650dSSadaf Ebrahimi    else
832*22dc650dSSadaf Ebrahimi      for opt in "" $jitopt -dfa; do
833*22dc650dSSadaf Ebrahimi        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput21 testtry
834*22dc650dSSadaf Ebrahimi        checkresult $? 21 "$opt"
835*22dc650dSSadaf Ebrahimi      done
836*22dc650dSSadaf Ebrahimi    fi
837*22dc650dSSadaf Ebrahimi  fi
838*22dc650dSSadaf Ebrahimi
839*22dc650dSSadaf Ebrahimi  # \C tests with UTF - DFA matching is not supported for \C in UTF mode
840*22dc650dSSadaf Ebrahimi
841*22dc650dSSadaf Ebrahimi  if [ "$do22" = yes ] ; then
842*22dc650dSSadaf Ebrahimi    echo $title22
843*22dc650dSSadaf Ebrahimi    if [ $supportBSC -eq 0 ] ; then
844*22dc650dSSadaf Ebrahimi      echo "  Skipped because \C is disabled"
845*22dc650dSSadaf Ebrahimi    elif [ $utf -eq 0 ] ; then
846*22dc650dSSadaf Ebrahimi      echo "  Skipped because UTF-$bits support is not available"
847*22dc650dSSadaf Ebrahimi    else
848*22dc650dSSadaf Ebrahimi      for opt in "" $jitopt; do
849*22dc650dSSadaf Ebrahimi        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput22 testtry
850*22dc650dSSadaf Ebrahimi        checkresult $? 22-$bits "$opt"
851*22dc650dSSadaf Ebrahimi      done
852*22dc650dSSadaf Ebrahimi    fi
853*22dc650dSSadaf Ebrahimi  fi
854*22dc650dSSadaf Ebrahimi
855*22dc650dSSadaf Ebrahimi  # Test when \C is disabled
856*22dc650dSSadaf Ebrahimi
857*22dc650dSSadaf Ebrahimi  if [ "$do23" = yes ] ; then
858*22dc650dSSadaf Ebrahimi    echo $title23
859*22dc650dSSadaf Ebrahimi    if [ $supportBSC -ne 0 ] ; then
860*22dc650dSSadaf Ebrahimi      echo "  Skipped because \C is not disabled"
861*22dc650dSSadaf Ebrahimi    else
862*22dc650dSSadaf Ebrahimi      $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput23 testtry
863*22dc650dSSadaf Ebrahimi      checkresult $? 23 ""
864*22dc650dSSadaf Ebrahimi    fi
865*22dc650dSSadaf Ebrahimi  fi
866*22dc650dSSadaf Ebrahimi
867*22dc650dSSadaf Ebrahimi  # Non-UTF pattern conversion tests
868*22dc650dSSadaf Ebrahimi
869*22dc650dSSadaf Ebrahimi  if [ "$do24" = yes ] ; then
870*22dc650dSSadaf Ebrahimi    echo $title24
871*22dc650dSSadaf Ebrahimi    $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput24 testtry
872*22dc650dSSadaf Ebrahimi    checkresult $? 24 ""
873*22dc650dSSadaf Ebrahimi  fi
874*22dc650dSSadaf Ebrahimi
875*22dc650dSSadaf Ebrahimi  # UTF pattern conversion tests
876*22dc650dSSadaf Ebrahimi
877*22dc650dSSadaf Ebrahimi  if [ "$do25" = yes ] ; then
878*22dc650dSSadaf Ebrahimi    echo $title25
879*22dc650dSSadaf Ebrahimi    if [ $utf -eq 0 ] ; then
880*22dc650dSSadaf Ebrahimi      echo "  Skipped because UTF-$bits support is not available"
881*22dc650dSSadaf Ebrahimi    else
882*22dc650dSSadaf Ebrahimi      $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinput25 testtry
883*22dc650dSSadaf Ebrahimi      checkresult $? 25 ""
884*22dc650dSSadaf Ebrahimi    fi
885*22dc650dSSadaf Ebrahimi  fi
886*22dc650dSSadaf Ebrahimi
887*22dc650dSSadaf Ebrahimi  # Auto-generated unicode property tests
888*22dc650dSSadaf Ebrahimi
889*22dc650dSSadaf Ebrahimi  if [ $do26 = yes ] ; then
890*22dc650dSSadaf Ebrahimi    echo $title26
891*22dc650dSSadaf Ebrahimi    if [ $utf -eq 0 ] ; then
892*22dc650dSSadaf Ebrahimi      echo "  Skipped because UTF-$bits support is not available"
893*22dc650dSSadaf Ebrahimi    else
894*22dc650dSSadaf Ebrahimi      for opt in "" $jitopt; do
895*22dc650dSSadaf Ebrahimi        $sim $valgrind ${opt:+$vjs} ./pcre2test -q $setstack $bmode $opt $testdata/testinput26 testtry
896*22dc650dSSadaf Ebrahimi        checkresult $? 26 "$opt"
897*22dc650dSSadaf Ebrahimi      done
898*22dc650dSSadaf Ebrahimi    fi
899*22dc650dSSadaf Ebrahimi  fi
900*22dc650dSSadaf Ebrahimi
901*22dc650dSSadaf Ebrahimi  # Manually selected heap tests - output may vary in different environments,
902*22dc650dSSadaf Ebrahimi  # which is why that are not automatically run.
903*22dc650dSSadaf Ebrahimi
904*22dc650dSSadaf Ebrahimi  if [ $doheap = yes ] ; then
905*22dc650dSSadaf Ebrahimi    echo $titleheap
906*22dc650dSSadaf Ebrahimi    $sim $valgrind ./pcre2test -q $setstack $bmode $testdata/testinputheap testtry
907*22dc650dSSadaf Ebrahimi    checkresult $? heap-$bits ""
908*22dc650dSSadaf Ebrahimi  fi
909*22dc650dSSadaf Ebrahimi
910*22dc650dSSadaf Ebrahimi# End of loop for 8/16/32-bit tests
911*22dc650dSSadaf Ebrahimidone
912*22dc650dSSadaf Ebrahimi
913*22dc650dSSadaf Ebrahimi# Clean up local working files
914*22dc650dSSadaf Ebrahimirm -f testbtables testSinput test3input testsaved1 testsaved2 test3output test3outputA test3outputB teststdout teststderr testtry
915*22dc650dSSadaf Ebrahimi
916*22dc650dSSadaf Ebrahimi# End
917