537 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			537 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| # These are:
 | |
| #
 | |
| # (1) Tests of the match-limiting features. The results are different for
 | |
| # interpretive or JIT matching, so this test should not be run with JIT. The
 | |
| # same tests are run using JIT in test 17.
 | |
| 
 | |
| # (2) Other tests that must not be run with JIT.
 | |
| 
 | |
| /(a+)*zz/I
 | |
| Capture group count = 1
 | |
| Starting code units: a z 
 | |
| Last code unit = 'z'
 | |
| Subject length lower bound = 2
 | |
|   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits
 | |
| Minimum heap limit = 0
 | |
| Minimum match limit = 7
 | |
| Minimum depth limit = 7
 | |
|  0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazz
 | |
|  1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 | |
|   aaaaaaaaaaaaaz\=find_limits
 | |
| Minimum heap limit = 0
 | |
| Minimum match limit = 20481
 | |
| Minimum depth limit = 30
 | |
| No match
 | |
| 
 | |
| !((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)!I
 | |
| Capture group count = 1
 | |
| May match empty string
 | |
| Subject length lower bound = 0
 | |
|    /* this is a C style comment */\=find_limits
 | |
| Minimum heap limit = 0
 | |
| Minimum match limit = 64
 | |
| Minimum depth limit = 7
 | |
|  0: /* this is a C style comment */
 | |
|  1: /* this is a C style comment */
 | |
| 
 | |
| /^(?>a)++/
 | |
|     aa\=find_limits
 | |
| Minimum heap limit = 0
 | |
| Minimum match limit = 5
 | |
| Minimum depth limit = 3
 | |
|  0: aa
 | |
|     aaaaaaaaa\=find_limits
 | |
| Minimum heap limit = 0
 | |
| Minimum match limit = 12
 | |
| Minimum depth limit = 3
 | |
|  0: aaaaaaaaa
 | |
| 
 | |
| /(a)(?1)++/
 | |
|     aa\=find_limits
 | |
| Minimum heap limit = 0
 | |
| Minimum match limit = 7
 | |
| Minimum depth limit = 5
 | |
|  0: aa
 | |
|  1: a
 | |
|     aaaaaaaaa\=find_limits
 | |
| Minimum heap limit = 0
 | |
| Minimum match limit = 21
 | |
| Minimum depth limit = 5
 | |
|  0: aaaaaaaaa
 | |
|  1: a
 | |
| 
 | |
| /a(?:.)*?a/ims
 | |
|     abbbbbbbbbbbbbbbbbbbbba\=find_limits
 | |
| Minimum heap limit = 0
 | |
| Minimum match limit = 24
 | |
| Minimum depth limit = 3
 | |
|  0: abbbbbbbbbbbbbbbbbbbbba
 | |
| 
 | |
| /a(?:.(*THEN))*?a/ims
 | |
|     abbbbbbbbbbbbbbbbbbbbba\=find_limits
 | |
| Minimum heap limit = 0
 | |
| Minimum match limit = 66
 | |
| Minimum depth limit = 45
 | |
|  0: abbbbbbbbbbbbbbbbbbbbba
 | |
| 
 | |
| /a(?:.(*THEN:ABC))*?a/ims
 | |
|     abbbbbbbbbbbbbbbbbbbbba\=find_limits
 | |
| Minimum heap limit = 0
 | |
| Minimum match limit = 66
 | |
| Minimum depth limit = 45
 | |
|  0: abbbbbbbbbbbbbbbbbbbbba
 | |
| 
 | |
| /^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/
 | |
|      aabbccddee\=find_limits
 | |
| Minimum heap limit = 0
 | |
| Minimum match limit = 7
 | |
| Minimum depth limit = 7
 | |
|  0: aabbccddee
 | |
| 
 | |
| /^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/
 | |
|      aabbccddee\=find_limits
 | |
| Minimum heap limit = 0
 | |
| Minimum match limit = 12
 | |
| Minimum depth limit = 12
 | |
|  0: aabbccddee
 | |
|  1: aa
 | |
|  2: bb
 | |
|  3: cc
 | |
|  4: dd
 | |
|  5: ee
 | |
| 
 | |
| /^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/
 | |
|      aabbccddee\=find_limits
 | |
| Minimum heap limit = 0
 | |
| Minimum match limit = 10
 | |
| Minimum depth limit = 10
 | |
|  0: aabbccddee
 | |
|  1: aa
 | |
|  2: cc
 | |
|  3: ee
 | |
| 
 | |
| /(*LIMIT_MATCH=12bc)abc/
 | |
| Failed: error 160 at offset 17: (*VERB) not recognized or malformed
 | |
| 
 | |
| /(*LIMIT_MATCH=4294967290)abc/
 | |
| Failed: error 160 at offset 24: (*VERB) not recognized or malformed
 | |
| 
 | |
| /(*LIMIT_DEPTH=4294967280)abc/I
 | |
| Capture group count = 0
 | |
| Depth limit = 4294967280
 | |
| First code unit = 'a'
 | |
| Last code unit = 'c'
 | |
| Subject length lower bound = 3
 | |
| 
 | |
| /(a+)*zz/
 | |
| \= Expect no match
 | |
|     aaaaaaaaaaaaaz
 | |
| No match
 | |
| \= Expect limit exceeded
 | |
|     aaaaaaaaaaaaaz\=match_limit=3000
 | |
| Failed: error -47: match limit exceeded
 | |
| 
 | |
| /(a+)*zz/
 | |
| \= Expect limit exceeded
 | |
|     aaaaaaaaaaaaaz\=depth_limit=10
 | |
| Failed: error -53: matching depth limit exceeded
 | |
| 
 | |
| /(*LIMIT_MATCH=3000)(a+)*zz/I
 | |
| Capture group count = 1
 | |
| Match limit = 3000
 | |
| Starting code units: a z 
 | |
| Last code unit = 'z'
 | |
| Subject length lower bound = 2
 | |
| \= Expect limit exceeded
 | |
|     aaaaaaaaaaaaaz
 | |
| Failed: error -47: match limit exceeded
 | |
| \= Expect limit exceeded
 | |
|     aaaaaaaaaaaaaz\=match_limit=60000
 | |
| Failed: error -47: match limit exceeded
 | |
| 
 | |
| /(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I
 | |
| Capture group count = 1
 | |
| Match limit = 3000
 | |
| Starting code units: a z 
 | |
| Last code unit = 'z'
 | |
| Subject length lower bound = 2
 | |
| \= Expect limit exceeded
 | |
|     aaaaaaaaaaaaaz
 | |
| Failed: error -47: match limit exceeded
 | |
| 
 | |
| /(*LIMIT_MATCH=60000)(a+)*zz/I
 | |
| Capture group count = 1
 | |
| Match limit = 60000
 | |
| Starting code units: a z 
 | |
| Last code unit = 'z'
 | |
| Subject length lower bound = 2
 | |
| \= Expect no match
 | |
|     aaaaaaaaaaaaaz
 | |
| No match
 | |
| \= Expect limit exceeded
 | |
|     aaaaaaaaaaaaaz\=match_limit=3000
 | |
| Failed: error -47: match limit exceeded
 | |
| 
 | |
| /(*LIMIT_DEPTH=10)(a+)*zz/I
 | |
| Capture group count = 1
 | |
| Depth limit = 10
 | |
| Starting code units: a z 
 | |
| Last code unit = 'z'
 | |
| Subject length lower bound = 2
 | |
| \= Expect limit exceeded
 | |
|     aaaaaaaaaaaaaz
 | |
| Failed: error -53: matching depth limit exceeded
 | |
| \= Expect limit exceeded
 | |
|     aaaaaaaaaaaaaz\=depth_limit=1000
 | |
| Failed: error -53: matching depth limit exceeded
 | |
| 
 | |
| /(*LIMIT_DEPTH=10)(*LIMIT_DEPTH=1000)(a+)*zz/I
 | |
| Capture group count = 1
 | |
| Depth limit = 1000
 | |
| Starting code units: a z 
 | |
| Last code unit = 'z'
 | |
| Subject length lower bound = 2
 | |
| \= Expect no match
 | |
|     aaaaaaaaaaaaaz
 | |
| No match
 | |
| 
 | |
| /(*LIMIT_DEPTH=1000)(a+)*zz/I
 | |
| Capture group count = 1
 | |
| Depth limit = 1000
 | |
| Starting code units: a z 
 | |
| Last code unit = 'z'
 | |
| Subject length lower bound = 2
 | |
| \= Expect no match
 | |
|     aaaaaaaaaaaaaz
 | |
| No match
 | |
| \= Expect limit exceeded
 | |
|     aaaaaaaaaaaaaz\=depth_limit=10
 | |
| Failed: error -53: matching depth limit exceeded
 | |
| 
 | |
| # These three have infinitely nested recursions.
 | |
| 
 | |
| /((?2))((?1))/
 | |
|     abc
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
| 
 | |
| /((?(R2)a+|(?1)b))()/
 | |
|     aaaabcde
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
| 
 | |
| /(?(R)a*(?1)|((?R))b)/
 | |
|     aaaabcde
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
| 
 | |
| # The allusedtext modifier does not work with JIT, which does not maintain
 | |
| # the leftchar/rightchar data.
 | |
| 
 | |
| /abc(?=xyz)/allusedtext
 | |
|     abcxyzpqr
 | |
|  0: abcxyz
 | |
|        >>>
 | |
|     abcxyzpqr\=aftertext
 | |
|  0: abcxyz
 | |
|        >>>
 | |
|  0+ xyzpqr
 | |
| 
 | |
| /(?<=pqr)abc(?=xyz)/allusedtext
 | |
|     xyzpqrabcxyzpqr
 | |
|  0: pqrabcxyz
 | |
|     <<<   >>>
 | |
|     xyzpqrabcxyzpqr\=aftertext
 | |
|  0: pqrabcxyz
 | |
|     <<<   >>>
 | |
|  0+ xyzpqr
 | |
| 
 | |
| /a\b/
 | |
|     a.\=allusedtext
 | |
|  0: a.
 | |
|      >
 | |
|     a\=allusedtext
 | |
|  0: a
 | |
| 
 | |
| /abc\Kxyz/
 | |
|     abcxyz\=allusedtext
 | |
|  0: abcxyz
 | |
|     <<<   
 | |
| 
 | |
| /abc(?=xyz(*ACCEPT))/
 | |
|     abcxyz\=allusedtext
 | |
|  0: abcxyz
 | |
|        >>>
 | |
| 
 | |
| /abc(?=abcde)(?=ab)/allusedtext
 | |
|     abcabcdefg
 | |
|  0: abcabcde
 | |
|        >>>>>
 | |
| 
 | |
| #subject allusedtext
 | |
| 
 | |
| /(?<=abc)123/
 | |
|     xyzabc123pqr
 | |
|  0: abc123
 | |
|     <<<   
 | |
|     xyzabc12\=ps
 | |
| Partial match: abc12
 | |
|                <<<
 | |
|     xyzabc12\=ph
 | |
| Partial match: abc12
 | |
|                <<<
 | |
| 
 | |
| /\babc\b/
 | |
|     +++abc+++
 | |
|  0: +abc+
 | |
|     <   >
 | |
|     +++ab\=ps
 | |
| Partial match: +ab
 | |
|                <
 | |
|     +++ab\=ph
 | |
| Partial match: +ab
 | |
|                <
 | |
| 
 | |
| /(?<=abc)def/
 | |
|     abc\=ph
 | |
| Partial match: abc
 | |
|                <<<
 | |
| 
 | |
| /(?<=123)(*MARK:xx)abc/mark
 | |
|     xxxx123a\=ph
 | |
| Partial match, mark=xx: 123a
 | |
|                         <<<
 | |
|     xxxx123a\=ps
 | |
| Partial match, mark=xx: 123a
 | |
|                         <<<
 | |
| 
 | |
| /(?<=(?<=a)b)c.*/I
 | |
| Capture group count = 0
 | |
| Max lookbehind = 1
 | |
| First code unit = 'c'
 | |
| Subject length lower bound = 1
 | |
|     abc\=ph
 | |
| Partial match: abc
 | |
|                <<
 | |
| \= Expect no match
 | |
|     xbc\=ph
 | |
| No match
 | |
| 
 | |
| /(?<=ab)c.*/I
 | |
| Capture group count = 0
 | |
| Max lookbehind = 2
 | |
| First code unit = 'c'
 | |
| Subject length lower bound = 1
 | |
|     abc\=ph
 | |
| Partial match: abc
 | |
|                <<
 | |
| \= Expect no match
 | |
|     xbc\=ph
 | |
| No match
 | |
| 
 | |
| /abc(?<=bc)def/
 | |
|     xxxabcd\=ph
 | |
| Partial match: abcd
 | |
| 
 | |
| /(?<=ab)cdef/
 | |
|     xxabcd\=ph
 | |
| Partial match: abcd
 | |
|                <<
 | |
| 
 | |
| /(?<=(?<=(?<=a)b)c)./I
 | |
| Capture group count = 0
 | |
| Max lookbehind = 1
 | |
| Subject length lower bound = 1
 | |
|     123abcXYZ
 | |
|  0: abcX
 | |
|     <<< 
 | |
| 
 | |
| /(?<=ab(cd(?<=...)))./I
 | |
| Capture group count = 1
 | |
| Max lookbehind = 4
 | |
| Subject length lower bound = 1
 | |
|     abcdX
 | |
|  0: abcdX
 | |
|     <<<< 
 | |
|  1: cd
 | |
| 
 | |
| /(?<=ab((?<=...)cd))./I
 | |
| Capture group count = 1
 | |
| Max lookbehind = 4
 | |
| Subject length lower bound = 1
 | |
|     ZabcdX
 | |
|  0: ZabcdX
 | |
|     <<<<< 
 | |
|  1: cd
 | |
| 
 | |
| /(?<=((?<=(?<=ab).))(?1)(?1))./I
 | |
| Capture group count = 1
 | |
| Max lookbehind = 2
 | |
| Subject length lower bound = 1
 | |
|     abxZ
 | |
|  0: abxZ
 | |
|     <<< 
 | |
|  1: 
 | |
| 
 | |
| #subject
 | |
| # -------------------------------------------------------------------
 | |
| 
 | |
| # These tests provoke recursion loops, which give a different error message
 | |
| # when JIT is used.
 | |
| 
 | |
| /(?R)/I
 | |
| Capture group count = 0
 | |
| May match empty string
 | |
| Subject length lower bound = 0
 | |
|     abcd
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
| 
 | |
| /(a|(?R))/I
 | |
| Capture group count = 1
 | |
| May match empty string
 | |
| Subject length lower bound = 0
 | |
|     abcd
 | |
|  0: a
 | |
|  1: a
 | |
|     defg
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
| 
 | |
| /(ab|(bc|(de|(?R))))/I
 | |
| Capture group count = 3
 | |
| May match empty string
 | |
| Subject length lower bound = 0
 | |
|     abcd
 | |
|  0: ab
 | |
|  1: ab
 | |
|     fghi
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
| 
 | |
| /(ab|(bc|(de|(?1))))/I
 | |
| Capture group count = 3
 | |
| May match empty string
 | |
| Subject length lower bound = 0
 | |
|     abcd
 | |
|  0: ab
 | |
|  1: ab
 | |
|     fghi
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
| 
 | |
| /x(ab|(bc|(de|(?1)x)x)x)/I
 | |
| Capture group count = 3
 | |
| First code unit = 'x'
 | |
| Subject length lower bound = 3
 | |
|     xab123
 | |
|  0: xab
 | |
|  1: ab
 | |
|     xfghi
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
| 
 | |
| /(?!\w)(?R)/
 | |
|     abcd
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
|     =abc
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
| 
 | |
| /(?=\w)(?R)/
 | |
|     =abc
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
|     abcd
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
| 
 | |
| /(?<!\w)(?R)/
 | |
|     abcd
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
| 
 | |
| /(?<=\w)(?R)/
 | |
|     abcd
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
| 
 | |
| /(a+|(?R)b)/
 | |
|     aaa
 | |
|  0: aaa
 | |
|  1: aaa
 | |
|     bbb
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
| 
 | |
| /[^\xff]((?1))/BI
 | |
| ------------------------------------------------------------------
 | |
|         Bra
 | |
|         [^\x{ff}]
 | |
|         CBra 1
 | |
|         Recurse
 | |
|         Ket
 | |
|         Ket
 | |
|         End
 | |
| ------------------------------------------------------------------
 | |
| Capture group count = 1
 | |
| Subject length lower bound = 1
 | |
|     abcd
 | |
| Failed: error -52: nested recursion at the same subject position
 | |
| 
 | |
| # These tests don't behave the same with JIT
 | |
| 
 | |
| /\w+(?C1)/BI,no_auto_possess
 | |
| ------------------------------------------------------------------
 | |
|         Bra
 | |
|         \w+
 | |
|         Callout 1 8 0
 | |
|         Ket
 | |
|         End
 | |
| ------------------------------------------------------------------
 | |
| Capture group count = 0
 | |
| Options: no_auto_possess
 | |
| Starting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P 
 | |
|   Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z 
 | |
| Subject length lower bound = 1
 | |
|     abc\=callout_fail=1
 | |
| --->abc
 | |
|   1 ^  ^    End of pattern
 | |
|   1 ^ ^     End of pattern
 | |
|   1 ^^      End of pattern
 | |
|   1  ^ ^    End of pattern
 | |
|   1  ^^     End of pattern
 | |
|   1   ^^    End of pattern
 | |
| No match
 | |
| 
 | |
| /(*NO_AUTO_POSSESS)\w+(?C1)/BI
 | |
| ------------------------------------------------------------------
 | |
|         Bra
 | |
|         \w+
 | |
|         Callout 1 26 0
 | |
|         Ket
 | |
|         End
 | |
| ------------------------------------------------------------------
 | |
| Capture group count = 0
 | |
| Compile options: <none>
 | |
| Overall options: no_auto_possess
 | |
| Starting code units: 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P 
 | |
|   Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z 
 | |
| Subject length lower bound = 1
 | |
|     abc\=callout_fail=1
 | |
| --->abc
 | |
|   1 ^  ^    End of pattern
 | |
|   1 ^ ^     End of pattern
 | |
|   1 ^^      End of pattern
 | |
|   1  ^ ^    End of pattern
 | |
|   1  ^^     End of pattern
 | |
|   1   ^^    End of pattern
 | |
| No match
 | |
| 
 | |
| # This test breaks the JIT stack limit
 | |
| 
 | |
| /(|]+){2,2452}/
 | |
|     (|]+){2,2452}
 | |
|  0: 
 | |
|  1: 
 | |
| 
 | |
| /(*LIMIT_HEAP=21)\[(a)]{60}/expand
 | |
|     \[a]{60}
 | |
| Failed: error -63: heap limit exceeded
 | |
| 
 | |
| /b(?<!ax)(?!cx)/allusedtext
 | |
|     abc
 | |
|  0: abc
 | |
|     < >
 | |
|     abcz
 | |
|  0: abcz
 | |
|     < >>
 | |
| 
 | |
| # End of testinput15
 |