 36af74cb25
			
		
	
	36af74cb25
	
	
	
		
			
			Some manual changes done to the library were lost with this update. They will be added in the next commit.
		
			
				
	
	
		
			391 lines
		
	
	
		
			8.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			391 lines
		
	
	
		
			8.8 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
 | |
| Capturing subpattern count = 1
 | |
| Starting code units: a z 
 | |
| Last code unit = 'z'
 | |
| Subject length lower bound = 2
 | |
|   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits
 | |
| Minimum match limit = 8
 | |
| Minimum recursion limit = 6
 | |
|  0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazz
 | |
|  1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 | |
|   aaaaaaaaaaaaaz\=find_limits
 | |
| Minimum match limit = 32768
 | |
| Minimum recursion limit = 29
 | |
| No match
 | |
| 
 | |
| !((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)!I
 | |
| Capturing subpattern count = 1
 | |
| May match empty string
 | |
| Subject length lower bound = 0
 | |
|    /* this is a C style comment */\=find_limits
 | |
| Minimum match limit = 120
 | |
| Minimum recursion limit = 6
 | |
|  0: /* this is a C style comment */
 | |
|  1: /* this is a C style comment */
 | |
| 
 | |
| /^(?>a)++/
 | |
|     aa\=find_limits
 | |
| Minimum match limit = 5
 | |
| Minimum recursion limit = 2
 | |
|  0: aa
 | |
|     aaaaaaaaa\=find_limits
 | |
| Minimum match limit = 12
 | |
| Minimum recursion limit = 2
 | |
|  0: aaaaaaaaa
 | |
|     
 | |
| /(a)(?1)++/
 | |
|     aa\=find_limits
 | |
| Minimum match limit = 7
 | |
| Minimum recursion limit = 4
 | |
|  0: aa
 | |
|  1: a
 | |
|     aaaaaaaaa\=find_limits
 | |
| Minimum match limit = 21
 | |
| Minimum recursion limit = 4
 | |
|  0: aaaaaaaaa
 | |
|  1: a
 | |
| 
 | |
| /a(?:.)*?a/ims
 | |
|     abbbbbbbbbbbbbbbbbbbbba\=find_limits
 | |
| Minimum match limit = 65
 | |
| Minimum recursion limit = 2
 | |
|  0: abbbbbbbbbbbbbbbbbbbbba
 | |
|     
 | |
| /a(?:.(*THEN))*?a/ims
 | |
|     abbbbbbbbbbbbbbbbbbbbba\=find_limits
 | |
| Minimum match limit = 86
 | |
| Minimum recursion limit = 45
 | |
|  0: abbbbbbbbbbbbbbbbbbbbba
 | |
| 
 | |
| /a(?:.(*THEN:ABC))*?a/ims
 | |
|     abbbbbbbbbbbbbbbbbbbbba\=find_limits
 | |
| Minimum match limit = 86
 | |
| Minimum recursion limit = 45
 | |
|  0: abbbbbbbbbbbbbbbbbbbbba
 | |
| 
 | |
| /^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/
 | |
|      aabbccddee\=find_limits
 | |
| Minimum match limit = 7
 | |
| Minimum recursion limit = 2
 | |
|  0: aabbccddee
 | |
| 
 | |
| /^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/
 | |
|      aabbccddee\=find_limits
 | |
| Minimum match limit = 17
 | |
| Minimum recursion limit = 16
 | |
|  0: aabbccddee
 | |
|  1: aa
 | |
|  2: bb
 | |
|  3: cc
 | |
|  4: dd
 | |
|  5: ee
 | |
| 
 | |
| /^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/
 | |
|      aabbccddee\=find_limits
 | |
| Minimum match limit = 13
 | |
| Minimum recursion 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_RECURSION=4294967280)abc/I
 | |
| Capturing subpattern count = 0
 | |
| Recursion limit = 4294967280
 | |
| First code unit = 'a'
 | |
| Last code unit = 'c'
 | |
| Subject length lower bound = 3
 | |
| 
 | |
| /(a+)*zz/
 | |
|     aaaaaaaaaaaaaz
 | |
| No match
 | |
|     aaaaaaaaaaaaaz\=match_limit=3000
 | |
| Failed: error -47: match limit exceeded
 | |
| 
 | |
| /(a+)*zz/
 | |
|     aaaaaaaaaaaaaz\=recursion_limit=10
 | |
| Failed: error -53: recursion limit exceeded
 | |
| 
 | |
| /(*LIMIT_MATCH=3000)(a+)*zz/I
 | |
| Capturing subpattern count = 1
 | |
| Match limit = 3000
 | |
| Starting code units: a z 
 | |
| Last code unit = 'z'
 | |
| Subject length lower bound = 2
 | |
|     aaaaaaaaaaaaaz
 | |
| Failed: error -47: match limit exceeded
 | |
|     aaaaaaaaaaaaaz\=match_limit=60000
 | |
| Failed: error -47: match limit exceeded
 | |
| 
 | |
| /(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I
 | |
| Capturing subpattern count = 1
 | |
| Match limit = 3000
 | |
| Starting code units: a z 
 | |
| Last code unit = 'z'
 | |
| Subject length lower bound = 2
 | |
|     aaaaaaaaaaaaaz
 | |
| Failed: error -47: match limit exceeded
 | |
| 
 | |
| /(*LIMIT_MATCH=60000)(a+)*zz/I
 | |
| Capturing subpattern count = 1
 | |
| Match limit = 60000
 | |
| Starting code units: a z 
 | |
| Last code unit = 'z'
 | |
| Subject length lower bound = 2
 | |
|     aaaaaaaaaaaaaz
 | |
| No match
 | |
|     aaaaaaaaaaaaaz\=match_limit=3000
 | |
| Failed: error -47: match limit exceeded
 | |
| 
 | |
| /(*LIMIT_RECURSION=10)(a+)*zz/I
 | |
| Capturing subpattern count = 1
 | |
| Recursion limit = 10
 | |
| Starting code units: a z 
 | |
| Last code unit = 'z'
 | |
| Subject length lower bound = 2
 | |
|     aaaaaaaaaaaaaz
 | |
| Failed: error -53: recursion limit exceeded
 | |
|     aaaaaaaaaaaaaz\=recursion_limit=1000
 | |
| Failed: error -53: recursion limit exceeded
 | |
| 
 | |
| /(*LIMIT_RECURSION=10)(*LIMIT_RECURSION=1000)(a+)*zz/I
 | |
| Capturing subpattern count = 1
 | |
| Recursion limit = 1000
 | |
| Starting code units: a z 
 | |
| Last code unit = 'z'
 | |
| Subject length lower bound = 2
 | |
|     aaaaaaaaaaaaaz
 | |
| No match
 | |
| 
 | |
| /(*LIMIT_RECURSION=1000)(a+)*zz/I
 | |
| Capturing subpattern count = 1
 | |
| Recursion limit = 1000
 | |
| Starting code units: a z 
 | |
| Last code unit = 'z'
 | |
| Subject length lower bound = 2
 | |
|     aaaaaaaaaaaaaz
 | |
| No match
 | |
|     aaaaaaaaaaaaaz\=recursion_limit=10
 | |
| Failed: error -53: recursion 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
 | |
|        >>>>>
 | |
|     
 | |
| # These tests provoke recursion loops, which give a different error message
 | |
| # when JIT is used.
 | |
| 
 | |
| /(?R)/I
 | |
| Capturing subpattern 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
 | |
| Capturing subpattern 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
 | |
| Capturing subpattern 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
 | |
| Capturing subpattern 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
 | |
| Capturing subpattern 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
 | |
| ------------------------------------------------------------------
 | |
| Capturing subpattern 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
 | |
| ------------------------------------------------------------------
 | |
| Capturing subpattern 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 ^  ^    
 | |
|   1 ^ ^     
 | |
|   1 ^^      
 | |
|   1  ^ ^    
 | |
|   1  ^^     
 | |
|   1   ^^    
 | |
| No match
 | |
| 
 | |
| /(*NO_AUTO_POSSESS)\w+(?C1)/BI
 | |
| ------------------------------------------------------------------
 | |
|         Bra
 | |
|         \w+
 | |
|         Callout 1 26 0
 | |
|         Ket
 | |
|         End
 | |
| ------------------------------------------------------------------
 | |
| Capturing subpattern 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 ^  ^    
 | |
|   1 ^ ^     
 | |
|   1 ^^      
 | |
|   1  ^ ^    
 | |
|   1  ^^     
 | |
|   1   ^^    
 | |
| No match
 | |
| 
 | |
| # This test breaks the JIT stack limit 
 | |
| 
 | |
| /(|]+){2,2452}/
 | |
|     (|]+){2,2452}
 | |
|  0: 
 | |
|  1: 
 | |
| 
 | |
| # End of testinput15
 |