This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regmatch(): make IFMATCH use PUSH_STACK rather than fake recursion
[perl5.git] / t / op / re_tests
index 88f69f2..8c8beb1 100644 (file)
@@ -1,24 +1,54 @@
 abc    abc     y       $&      abc
+abc    abc     y       $-[0]   0
+abc    abc     y       $+[0]   3
 abc    xbc     n       -       -
 abc    axc     n       -       -
 abc    abx     n       -       -
 abc    xabcy   y       $&      abc
+abc    xabcy   y       $-[0]   1
+abc    xabcy   y       $+[0]   4
 abc    ababc   y       $&      abc
+abc    ababc   y       $-[0]   2
+abc    ababc   y       $+[0]   5
 ab*c   abc     y       $&      abc
+ab*c   abc     y       $-[0]   0
+ab*c   abc     y       $+[0]   3
 ab*bc  abc     y       $&      abc
+ab*bc  abc     y       $-[0]   0
+ab*bc  abc     y       $+[0]   3
 ab*bc  abbc    y       $&      abbc
+ab*bc  abbc    y       $-[0]   0
+ab*bc  abbc    y       $+[0]   4
 ab*bc  abbbbc  y       $&      abbbbc
+ab*bc  abbbbc  y       $-[0]   0
+ab*bc  abbbbc  y       $+[0]   6
 .{1}   abbbbc  y       $&      a
+.{1}   abbbbc  y       $-[0]   0
+.{1}   abbbbc  y       $+[0]   1
 .{3,4} abbbbc  y       $&      abbb
+.{3,4} abbbbc  y       $-[0]   0
+.{3,4} abbbbc  y       $+[0]   4
 ab{0,}bc       abbbbc  y       $&      abbbbc
+ab{0,}bc       abbbbc  y       $-[0]   0
+ab{0,}bc       abbbbc  y       $+[0]   6
 ab+bc  abbc    y       $&      abbc
+ab+bc  abbc    y       $-[0]   0
+ab+bc  abbc    y       $+[0]   4
 ab+bc  abc     n       -       -
 ab+bc  abq     n       -       -
 ab{1,}bc       abq     n       -       -
 ab+bc  abbbbc  y       $&      abbbbc
+ab+bc  abbbbc  y       $-[0]   0
+ab+bc  abbbbc  y       $+[0]   6
 ab{1,}bc       abbbbc  y       $&      abbbbc
+ab{1,}bc       abbbbc  y       $-[0]   0
+ab{1,}bc       abbbbc  y       $+[0]   6
 ab{1,3}bc      abbbbc  y       $&      abbbbc
+ab{1,3}bc      abbbbc  y       $-[0]   0
+ab{1,3}bc      abbbbc  y       $+[0]   6
 ab{3,4}bc      abbbbc  y       $&      abbbbc
+ab{3,4}bc      abbbbc  y       $-[0]   0
+ab{3,4}bc      abbbbc  y       $+[0]   6
 ab{4,5}bc      abbbbc  n       -       -
 ab?bc  abbc    y       $&      abbc
 ab?bc  abc     y       $&      abc
@@ -66,6 +96,9 @@ a[^]b]c       adc     y       $&      adc
 \Ba\B  -a      n       -       -
 \Ba\B  -a-     n       -       -
 \By\b  xy      y       -       -
+\By\b  xy      y       $-[0]   1
+\By\b  xy      y       $+[0]   2
+\By\b  xy      y       -       -
 \by\B  yz      y       -       -
 \By\B  xyz     y       -       -
 \w     a       y       -       -
@@ -95,6 +128,10 @@ a[\S]b      a-b     y       -       -
 ab|cd  abc     y       $&      ab
 ab|cd  abcd    y       $&      ab
 ()ef   def     y       $&-$1   ef-
+()ef   def     y       $-[0]   1
+()ef   def     y       $+[0]   3
+()ef   def     y       $-[1]   1
+()ef   def     y       $+[1]   1
 *a     -       c       -       Quantifier follows nothing
 (*)b   -       c       -       Quantifier follows nothing
 $b     b       n       -       -
@@ -106,12 +143,22 @@ a\\b      a\b     y       $&      a\b
 abc)   -       c       -       Unmatched )
 (abc   -       c       -       Unmatched (
 ((a))  abc     y       $&-$1-$2        a-a-a
+((a))  abc     y       $-[0]-$-[1]-$-[2]       0-0-0
+((a))  abc     y       $+[0]-$+[1]-$+[2]       1-1-1
+((a))  abc     b       @-      0 0 0
+((a))  abc     b       @+      1 1 1
 (a)b(c)        abc     y       $&-$1-$2        abc-a-c
+(a)b(c)        abc     y       $-[0]-$-[1]-$-[2]       0-0-2
+(a)b(c)        abc     y       $+[0]-$+[1]-$+[2]       3-1-3
 a+b+c  aabbabc y       $&      abc
 a{1,}b{1,}c    aabbabc y       $&      abc
 a**    -       c       -       Nested quantifiers
 a.+?c  abcabc  y       $&      abc
 (a+|b)*        ab      y       $&-$1   ab-b
+(a+|b)*        ab      y       $-[0]   0
+(a+|b)*        ab      y       $+[0]   2
+(a+|b)*        ab      y       $-[1]   1
+(a+|b)*        ab      y       $+[1]   2
 (a+|b){0,}     ab      y       $&-$1   ab-b
 (a+|b)+        ab      y       $&-$1   ab-b
 (a+|b){1,}     ab      y       $&-$1   ab-b
@@ -125,6 +172,10 @@ a*         y       $&
 ([abc])*bcd    abcd    y       $&-$1   abcd-a
 a|b|c|d|e      e       y       $&      e
 (a|b|c|d|e)f   ef      y       $&-$1   ef-e
+(a|b|c|d|e)f   ef      y       $-[0]   0
+(a|b|c|d|e)f   ef      y       $+[0]   2
+(a|b|c|d|e)f   ef      y       $-[1]   0
+(a|b|c|d|e)f   ef      y       $+[1]   1
 abcd*efg       abcdefg y       $&      abcdefg
 ab*    xabyabbbz       y       $&      ab
 ab*    xayabbbz        y       $&      a
@@ -136,12 +187,38 @@ ab*       xayabbbz        y       $&      a
 (ab|ab*)bc     abc     y       $&-$1   abc-a
 a([bc]*)c*     abc     y       $&-$1   abc-bc
 a([bc]*)(c*d)  abcd    y       $&-$1-$2        abcd-bc-d
+a([bc]*)(c*d)  abcd    y       $-[0]   0
+a([bc]*)(c*d)  abcd    y       $+[0]   4
+a([bc]*)(c*d)  abcd    y       $-[1]   1
+a([bc]*)(c*d)  abcd    y       $+[1]   3
+a([bc]*)(c*d)  abcd    y       $-[2]   3
+a([bc]*)(c*d)  abcd    y       $+[2]   4
 a([bc]+)(c*d)  abcd    y       $&-$1-$2        abcd-bc-d
 a([bc]*)(c+d)  abcd    y       $&-$1-$2        abcd-b-cd
+a([bc]*)(c+d)  abcd    y       $-[0]   0
+a([bc]*)(c+d)  abcd    y       $+[0]   4
+a([bc]*)(c+d)  abcd    y       $-[1]   1
+a([bc]*)(c+d)  abcd    y       $+[1]   2
+a([bc]*)(c+d)  abcd    y       $-[2]   2
+a([bc]*)(c+d)  abcd    y       $+[2]   4
 a[bcd]*dcdcde  adcdcde y       $&      adcdcde
 a[bcd]+dcdcde  adcdcde n       -       -
 (ab|a)b*c      abc     y       $&-$1   abc-ab
+(ab|a)b*c      abc     y       $-[0]   0
+(ab|a)b*c      abc     y       $+[0]   3
+(ab|a)b*c      abc     y       $-[1]   0
+(ab|a)b*c      abc     y       $+[1]   2
 ((a)(b)c)(d)   abcd    y       $1-$2-$3-$4     abc-a-b-d
+((a)(b)c)(d)   abcd    y       $-[0]   0
+((a)(b)c)(d)   abcd    y       $+[0]   4
+((a)(b)c)(d)   abcd    y       $-[1]   0
+((a)(b)c)(d)   abcd    y       $+[1]   3
+((a)(b)c)(d)   abcd    y       $-[2]   0
+((a)(b)c)(d)   abcd    y       $+[2]   1
+((a)(b)c)(d)   abcd    y       $-[3]   1
+((a)(b)c)(d)   abcd    y       $+[3]   2
+((a)(b)c)(d)   abcd    y       $-[4]   3
+((a)(b)c)(d)   abcd    y       $+[4]   4
 [a-zA-Z_][a-zA-Z0-9_]* alpha   y       $&      alpha
 ^a(bc+|b[eh])g|.h$     abh     y       $&-$1   bh-
 (bc+d$|ef*g.|h?i(j|k)) effgz   y       $&-$1-$2        effgz-effgz-
@@ -150,6 +227,10 @@ a[bcd]+dcdcde      adcdcde n       -       -
 (bc+d$|ef*g.|h?i(j|k)) bcdd    n       -       -
 (bc+d$|ef*g.|h?i(j|k)) reffgz  y       $&-$1-$2        effgz-effgz-
 ((((((((((a))))))))))  a       y       $10     a
+((((((((((a))))))))))  a       y       $-[0]   0
+((((((((((a))))))))))  a       y       $+[0]   1
+((((((((((a))))))))))  a       y       $-[10]  0
+((((((((((a))))))))))  a       y       $+[10]  1
 ((((((((((a))))))))))\10       aa      y       $&      aa
 ((((((((((a))))))))))${bang}   aa      n       -       -
 ((((((((((a))))))))))${bang}   a!      y       $&      a!
@@ -174,6 +255,12 @@ a[-]?c     ac      y       $&      ac
 ((\3|b)\2(a)x)+        aaxabxbaxbbx    n       -       -
 ((\3|b)\2(a)x)+        aaaxabaxbaaxbbax        y       $&-$1-$2-$3     bbax-bbax-b-a
 ((\3|b)\2(a)){2,}      bbaababbabaaaaabbaaaabba        y       $&-$1-$2-$3     bbaaaabba-bba-b-a
+(a)|(b)        b       y       $-[0]   0
+(a)|(b)        b       y       $+[0]   1
+(a)|(b)        b       y       x$-[1]  x
+(a)|(b)        b       y       x$+[1]  x
+(a)|(b)        b       y       $-[2]   0
+(a)|(b)        b       y       $+[2]   1
 'abc'i ABC     y       $&      ABC
 'abc'i XBC     n       -       -
 'abc'i AXC     n       -       -
@@ -833,3 +920,47 @@ ab(?i)cd   abCd    y       -       -
 (.*?)(?<=c|b)c abcd    y       $1      ab
 (.*?)(?<=[bc]) abcd    y       $1      ab
 (.*?)(?<=[bc])c        abcd    y       $1      ab
+2(]*)?$\1      2       y       $&      2
+(??{}) x       y       -       -
+a(b)?? abc     y       <$1>    <>      # undef [perl #16773]
+(\d{1,3}\.){3,}        128.134.142.8   y       <$1>    <142.>  # [perl #18019]
+^.{3,4}(.+)\1\z        foobarbar       y       $1      bar     # 16 tests for [perl #23171]
+^(?:f|o|b){3,4}(.+)\1\z        foobarbar       y       $1      bar
+^.{3,4}((?:b|a|r)+)\1\z        foobarbar       y       $1      bar
+^(?:f|o|b){3,4}((?:b|a|r)+)\1\z        foobarbar       y       $1      bar
+^.{3,4}(.+?)\1\z       foobarbar       y       $1      bar
+^(?:f|o|b){3,4}(.+?)\1\z       foobarbar       y       $1      bar
+^.{3,4}((?:b|a|r)+?)\1\z       foobarbar       y       $1      bar
+^(?:f|o|b){3,4}((?:b|a|r)+?)\1\z       foobarbar       y       $1      bar
+^.{2,3}?(.+)\1\z       foobarbar       y       $1      bar
+^(?:f|o|b){2,3}?(.+)\1\z       foobarbar       y       $1      bar
+^.{2,3}?((?:b|a|r)+)\1\z       foobarbar       y       $1      bar
+^(?:f|o|b){2,3}?((?:b|a|r)+)\1\z       foobarbar       y       $1      bar
+^.{2,3}?(.+?)\1\z      foobarbar       y       $1      bar
+^(?:f|o|b){2,3}?(.+?)\1\z      foobarbar       y       $1      bar
+^.{2,3}?((?:b|a|r)+?)\1\z      foobarbar       y       $1      bar
+^(?:f|o|b){2,3}?((?:b|a|r)+?)\1\z      foobarbar       y       $1      bar
+.*a(?!(b|cd)*e).*f     ......abef      n       -       -       # [perl #23030]
+x(?#   x       c       -       Sequence (?#... not terminated
+:x(?#: x       c       -       Sequence (?#... not terminated
+(WORDS|WORD)S  WORDS   y       $1      WORD
+(X.|WORDS|X.|WORD)S    WORDS   y       $1      WORD
+(WORDS|WORLD|WORD)S    WORDS   y       $1      WORD
+(X.|WORDS|WORD|Y.)S    WORDS   y       $1      WORD
+(foo|fool|x.|money|parted)$    fool    y       $1      fool
+(x.|foo|fool|x.|money|parted|y.)$      fool    y       $1      fool
+(foo|fool|money|parted)$       fool    y       $1      fool
+(foo|fool|x.|money|parted)$    fools   n       -       -
+(x.|foo|fool|x.|money|parted|y.)$      fools   n       -       -
+(foo|fool|money|parted)$       fools   n       -       -
+(a|aa|aaa|aaaa|aaaaa|aaaaaa)(b|c)      aaaaaaaaaaaaaaab        y       $1$2    aaaaaab
+(a|aa|aaa|aaaa|aaaaa|aaaaaa)(??{$1&&""})(b|c)  aaaaaaaaaaaaaaab        y       $1$2    aaaaaab
+(a|aa|aaa|aaaa|aaaaa|aaaaaa)(??{$1&&"foo"})(b|c)       aaaaaaaaaaaaaaab        n       -       -
+^(a*?)(?!(aa|aaaa)*$)  aaaaaaaaaaaaaaaaaaaa    y       $1      a       # [perl #34195]
+^(a*?)(?!(aa|aaaa)*$)(?=a\z)   aaaaaaaa        y       $1      aaaaaaa
+^(.)\s+.$(?(1))        A B     y       $1      A       # [perl #37688]
+(?:r?)*?r|(.{2,4})     abcde   y       $1      abcd
+(?!)+?|(.{2,4})        abcde   y       $1      abcd
+^(a*?)(?!(a{6}|a{5})*$)        aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y       $+[1]   12      # super-linear cache bug may return 18
+^((?>(?:aa)?b)?)       aab     y       $1      aab
+^((?:aa)*)(?:X+((?:\d+|-)(?:X+(.+))?))?$       aaaaX5  y       $1      aaaa