This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
59479802b6c397a889df88330c5a082049d14de6
[perl5.git] / ext / re / t / regop.t
1 #!./perl
2
3 BEGIN {
4         chdir 't' if -d 't';
5         @INC = '../lib';
6         require Config;
7         if (($Config::Config{'extensions'} !~ /\bre\b/) ){
8                 print "1..0 # Skip -- Perl configured without re module\n";
9                 exit 0;
10         }
11 }
12
13 use strict;
14 use Test::More;
15
16 chomp(my @strs=grep { !/^\s*\#/ } <DATA>);
17 chdir "../ext/re/t" or die "Can't chdir '../ext/re/t':$!\n";
18 my $out=`$^X regop.pl 2>&1`;
19 my @tests=grep { /\S/ } split /(?=Compiling REx)/,$out;
20
21 plan tests => 2+(@strs-grep { !$_ or /^---/ } @strs)+@tests;
22
23 my $numtests=4;
24 ok(@tests==$numtests,"Expecting output for $numtests patterns");
25 ok(defined $out,'regop.pl');
26 $out||="";
27 my $test=1;
28 foreach my $testout (@tests) {
29     my ($pattern)=$testout=~/Compiling REx "([^"]+)"/;
30     ok($pattern,"Pattern for test ".($test++));
31     while (@strs) {    
32         my $str=shift @strs;
33         last if !$str or $str=~/^---/;
34         next if $str=~/^\s*#/;
35         ok($testout=~/\Q$str\E/,"$str: /$pattern/");    
36     }    
37 }    
38
39 __END__
40 #Compiling REx "X(A|[B]Q||C|D)Y"
41 #size 34
42 #first at 1
43 #   1: EXACT <X>(3)
44 #   3: OPEN1(5)
45 #   5:   TRIE-EXACT(21)
46 #        [Words:5 Chars:5 Unique:5 States:6 Start-Class:A-D]
47 #          <A>
48 #          <BQ>
49 #          <>
50 #          <C>
51 #          <D>
52 #  21: CLOSE1(23)
53 #  23: EXACT <Y>(25)
54 #  25: END(0)
55 #anchored "X" at 0 floating "Y" at 1..3 (checking floating) minlen 2
56 #Guessing start of match, REx "X(A|[B]Q||C|D)Y" against "XY"...
57 #Found floating substr "Y" at offset 1...
58 #Found anchored substr "X" at offset 0...
59 #Guessed: match at offset 0
60 #Matching REx "X(A|[B]Q||C|D)Y" against "XY"
61 #  Setting an EVAL scope, savestack=140
62 #   0 <> <XY>              |  1:  EXACT <X>
63 #   1 <X> <Y>              |  3:  OPEN1
64 #   1 <X> <Y>              |  5:  TRIE-EXACT
65 #                                 matched empty string...
66 #   1 <X> <Y>              | 21:  CLOSE1
67 #   1 <X> <Y>              | 23:  EXACT <Y>
68 #   2 <XY> <>              | 25:  END
69 #Match successful!
70 #%MATCHED%
71 #Freeing REx: "X(A|[B]Q||C|D)Y"
72 Compiling REx "X(A|[B]Q||C|D)Y"
73 Start-Class:A-D]
74 TRIE-EXACT
75 <BQ>
76 matched empty string
77 Match successful!
78 Found floating substr "Y" at offset 1...
79 Found anchored substr "X" at offset 0...
80 Guessed: match at offset 0
81 checking floating
82 minlen 2
83 Words:5
84 Unique:5
85 States:6
86 %MATCHED%
87 ---
88 #Compiling REx "[f][o][o][b][a][r]"
89 #size 67
90 #first at 1
91 #   1: EXACT <foobar>(13)
92 #  13: END(0)
93 #anchored "foobar" at 0 (checking anchored isall) minlen 6
94 #Guessing start of match, REx "[f][o][o][b][a][r]" against "foobar"...
95 #Found anchored substr "foobar" at offset 0...
96 #Guessed: match at offset 0
97 #Freeing REx: "[f][o][o][b][a][r]"
98 foobar
99 checking anchored isall
100 minlen 6
101 anchored "foobar" at 0
102 Guessed: match at offset 0
103 Compiling REx "[f][o][o][b][a][r]"
104 Freeing REx: "[f][o][o][b][a][r]"
105 %MATCHED%
106 ---
107 #Compiling REx ".[XY]."
108 #size 14
109 #first at 1
110 #   1: REG_ANY(2)
111 #   2: ANYOF[XY](13)
112 #  13: REG_ANY(14)
113 #  14: END(0)
114 #minlen 3
115 #%FAILED%
116 #Freeing REx: ".[XY]."
117 %FAILED%
118 minlen 3
119 ---
120 #Compiling REx "(?:ABCP|ABCG|ABCE|ABCB|ABCA|ABCD)"
121 #size 20 nodes
122 #   1: EXACT <ABC>(3)
123 #   3: TRIE-EXACT(20)
124 #      [Start:4 Words:6 Chars:24 Unique:7 States:10 Minlen:1 Maxlen:1 Start-Class:A-EGP]
125 #        <ABCP>
126 #        <ABCG>
127 #        <ABCE>
128 #        <ABCB>
129 #        <ABCA>
130 #        <ABCD>
131 #  19: TAIL(20)
132 #  20: END(0)
133 #minlen 4
134 #Matching REx "(?:ABCP|ABCG|ABCE|ABCB|ABCA|ABCD)" against "ABCD"
135 #  Setting an EVAL scope, savestack=140
136 #   0 <> <ABCD>            |  1:  EXACT <ABC>
137 #   3 <ABC> <D>            |  3:  TRIE-EXACT
138 #                                 only one match : #6 <ABCD>
139 #   4 <ABCD> <>            | 20:    END
140 #Match successful!
141 #POP STATE(1)
142 #%MATCHED%
143 #Freeing REx: "(?:ABCP|ABCG|ABCE|ABCB|ABCA|ABCD)"
144 %MATCHED%
145 EXACT <ABC>
146 Start-Class:A-EGP
147 only one match : #6 <ABCD>
148 Start:4
149 minlen 4