5 if (($Config::Config{'extensions'} !~ /\bre\b/) ){
6 print "1..0 # Skip -- Perl configured without re module\n";
12 BEGIN { require "../../t/test.pl"; }
14 chomp(my @strs= grep { !/^\s*\#/ } <DATA>);
15 my $out = runperl(progfile => "t/regop.pl", stderr => 1 );
16 # VMS currently embeds linefeeds in the output.
17 $out =~ s/\cJ//g if $^O eq 'VMS';
18 my @tests = grep { /\S/ } split /(?=Compiling REx)/, $out;
19 # on debug builds we get an EXECUTING... message in there at the top
21 if $tests[0] =~ /EXECUTING.../;
23 plan( @tests + 2 + ( @strs - grep { !$_ or /^---/ } @strs ));
25 is( scalar @tests, $NUM_SECTS,
26 "Expecting output for $NUM_SECTS patterns, got ". scalar(@tests) );
27 ok( defined $out, 'regop.pl returned something defined' );
31 foreach my $testout ( @tests ) {
32 my ( $pattern )= $testout=~/Compiling REx "([^"]+)"/;
33 ok( $pattern, "Pattern for test " . ($test++) );
36 local $_= shift @strs;
42 ok( $testout=~/\Q$_\E/, "$_: /$pattern/" )
44 !$diaged++ and diag("PATTERN: /$pattern/\n\n"
46 . "WITHIN GOT:\n$testout");
51 # The format below is simple. Each line is an exact
52 # string that must be found in the output.
53 # Lines starting the # are comments.
54 # Lines starting with --- are separators indicating
55 # that the tests for this result set are finished.
56 # If you add a test make sure you update $NUM_SECTS
57 # the commented output is just for legacy/debugging purposes
58 BEGIN{ $NUM_SECTS= 8 }
61 #Compiling REx "X(A|[B]Q||C|D)Y"
67 # [Words:5 Chars:5 Unique:5 States:6 Start-Class:A-D]
76 #anchored "X" at 0 floating "Y" at 1..3 (checking floating) minlen 2
77 #Guessing start of match, REx "X(A|[B]Q||C|D)Y" against "XY"...
78 #Found floating substr "Y" at offset 1...
79 #Found anchored substr "X" at offset 0...
80 #Guessed: match at offset 0
81 #Matching REx "X(A|[B]Q||C|D)Y" against "XY"
82 # Setting an EVAL scope, savestack=140
83 # 0 <> <XY> | 1: EXACT <X>
84 # 1 <X> <Y> | 3: OPEN1
85 # 1 <X> <Y> | 5: TRIE-EXACT
86 # matched empty string...
87 # 1 <X> <Y> | 21: CLOSE1
88 # 1 <X> <Y> | 23: EXACT <Y>
92 #Freeing REx: "X(A|[B]Q||C|D)Y"
93 Compiling REx "X(A|[B]Q||C|D)Y"
99 Found floating substr "Y" at offset 1 (rx_origin now 0)...
100 Found anchored substr "X" at offset 0 (rx_origin now 0)...
101 Successfully guessed: match at offset 0
110 #Compiling REx "[f][o][o][b][a][r]"
113 # 1: EXACT <foobar>(13)
115 #anchored "foobar" at 0 (checking anchored isall) minlen 6
116 #Guessing start of match, REx "[f][o][o][b][a][r]" against "foobar"...
117 #Found anchored substr "foobar" at offset 0...
118 #Guessed: match at offset 0
119 #Freeing REx: "[f][o][o][b][a][r]"
121 checking anchored isall
123 anchored "foobar" at 0
124 Successfully guessed: match at offset 0
125 Compiling REx "[f][o][o][b][a][r]"
126 Freeing REx: "[f][o][o][b][a][r]"
129 #Compiling REx ".[XY]."
138 #Freeing REx: ".[XY]."
142 # Compiling REx "(?:ABCP|ABCG|ABCE|ABCB|ABCA|ABCD)"
143 # TRIE(NATIVE): W:6 C:24 Uq:7 Min:4 Max:4
144 # Char : Match Base Ofs A B C P G E D
145 # State|---------------------------------------------------
146 # # 1| @ 7 + 0[ 2 . . . . . .]
147 # # 2| @ 7 + 1[ . 3 . . . . .]
148 # # 3| @ 7 + 2[ . . 4 . . . .]
149 # # 4| @ A + 0[ 9 8 0 5 6 7 A]
156 # word_info N:(prev,char)= 1:(0,1) 2:(0,1) 3:(0,1) 4:(0,1) 5:(0,1) 6:(0,1)
159 # 3: TRIEC-EXACT<S:4/10 W:6 L:1/1 C:24/7>[A-EGP] (20)
167 # anchored "ABC" at 0 (checking anchored) minlen 4
168 # Guessing start of match in sv for REx "(?:ABCP|ABCG|ABCE|ABCB|ABCA|ABCD)" against "ABCD"
169 # Found anchored substr "ABC" at offset 0...
170 # Guessed: match at offset 0
171 # Matching REx "(?:ABCP|ABCG|ABCE|ABCB|ABCA|ABCD)" against "ABCD"
172 # 0 <> <ABCD> | 1:EXACT <ABC>(3)
173 # 3 <ABC> <D> | 3:TRIEC-EXACT<S:4/10 W:6 L:1/1 C:24/7>[A-EGP](20)
174 # 3 <ABC> <D> | State: 4 Accepted: 0 Charid: 7 CP: 44 After State: a
175 # 4 <ABCD> <> | State: a Accepted: 1 Charid: 7 CP: 0 After State: 0
176 # got 1 possible matches
177 # TRIE matched word #6, continuing
178 # 4 <ABCD> <> | 20: END(0)
181 # Freeing REx: "(?:ABCP|ABCG|ABCE|ABCB|ABCA|ABCD)"
194 #Compiling REx "(\.COM|\.EXE|\.BAT|\.CMD|\.VBS|\.VBE|\.JS|\.JSE|\.WSF|\.WSH|\.pyo|\.pyc|\.pyw|\.py)$"
195 #size 48 nodes first at 3
202 # [Start:2 Words:14 Chars:54 Unique:18 States:29 Minlen:2 Maxlen:3 Start-Class:BCEJPVWbcejpvw]
204 # ... yada yada ... (dmq)
209 #floating ""$ at 3..4 (checking floating) stclass "EXACTF <.>" minlen 3
210 #Guessing start of match, REx "(\.COM|\.EXE|\.BAT|\.CMD|\.VBS|\.VBE|\.JS|\.JSE|\.WSF|\.WSH|..." against "D:dev/perl/ver/28321_/perl.exe"...
211 #Found floating substr ""$ at offset 30...
212 #Starting position does not contradict /^/m...
213 #Does not contradict STCLASS...
214 #Guessed: match at offset 26
215 #Matching REx "(\.COM|\.EXE|\.BAT|\.CMD|\.VBS|\.VBE|\.JS|\.JSE|\.WSF|\.WSH|\.pyo|\.pyc|\.pyw|\.py)$..." against ".exe"
216 #Matching stclass "EXACTF <.>" against ".exe"
217 # Setting an EVAL scope, savestack=140
218 # 26 <21_/perl> <.exe> | 1: OPEN1
219 # 26 <21_/perl> <.exe> | 3: EXACTF <.>
220 # 27 <21_/perl.> <exe> | 5: TRIE-EXACTF
221 # only one match : #2 <.EXE>
222 # 30 <21_/perl.exe> <> | 45: CLOSE1
223 # 30 <21_/perl.exe> <> | 47: EOL
224 # 30 <21_/perl.exe> <> | 48: END
228 #Freeing REx: "(\\.COM|\\.EXE|\\.BAT|\\.CMD|\\.VBS|\\.VBE|\\.JS|\\.JSE|\\."......
230 floating ""$ at 3..4 (checking floating)
231 #stclass EXACTF <.> minlen 3
232 #Found floating substr ""$ at offset 30...
233 #Does not contradict STCLASS...
234 #Guessed: match at offset 26
235 #Matching stclass EXACTF <.> against ".exe"
242 #anchored "q" at 0 (checking anchored isall) minlen 1
243 #Guessing start of match, REx "[q]" against "q"...
244 #Found anchored substr "q" at offset 0...
245 #Guessed: match at offset 0
251 #Compiling REx "^(\S{1,9}):\s*(\d+)$"
267 #Freeing REx: "^(\S{1,9}):\s*(\d+)$"
269 Freeing REx: "^(\S{1,9}):\s*(\d+)$"
271 #Compiling REx "(?(DEFINE)(?<foo>foo))(?(DEFINE)(?<bar>(?&foo)bar))(?(DEFINE"...
272 study_chunk_recursed_count: 5
278 # 9: CLOSE1 'foo' (14)
283 # 18: OPEN2 'bar' (20)
284 # 20: GOSUB1[-15] (23)
285 # 23: EXACT <bar> (25)
286 # 25: CLOSE2 'bar' (30)
291 # 34: OPEN3 'baz' (36)
292 # 36: GOSUB2[-18] (39)
293 # 39: EXACT <baz> (41)
294 # 41: CLOSE3 'baz' (46)
299 # 50: OPEN4 'bop' (52)
300 # 52: GOSUB3[-18] (55)
301 # 55: EXACT <bop> (57)
302 # 57: CLOSE4 'bop' (62)
307 #Matching REx "(?(DEFINE)(?<foo>foo))(?(DEFINE)(?<bar>(?&foo)bar))(?(DEFINE"... against ""
308 # 0 <> <> | 1:DEFINEP(3)
309 # 0 <> <> | 3:IFTHEN(14)
310 # 0 <> <> | 14:DEFINEP(16)
311 # 0 <> <> | 16:IFTHEN(30)
312 # 0 <> <> | 30:DEFINEP(32)
313 # 0 <> <> | 32:IFTHEN(46)
314 # 0 <> <> | 46:DEFINEP(48)
315 # 0 <> <> | 48:IFTHEN(62)
316 # 0 <> <> | 62:END(0)
319 #Freeing REx: "(?(DEFINE)(?<foo>foo))(?(DEFINE)(?<bar>(?&foo)bar))(?(DEFINE"...