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