Add Regex conditionals. Various bugfixes. More tests.
[p5sagit/p5-mst-13.2.git] / t / op / re_tests
index d7e24f3..9f0e06b 100644 (file)
@@ -70,12 +70,17 @@ a.*c        axyzc   y       $&      axyzc
 a.*c   axyzd   n       -       -
 a[bc]d abc     n       -       -
 a[bc]d abd     y       $&      abd
+a[b]d  abd     y       $&      abd
+[a][b][d]      abd     y       $&      abd
+.[b].  abd     y       $&      abd
+.[b].  aBd     n       -       -
+(?i:.[b].)     abd     y       $&      abd
 a[b-d]e        abd     n       -       -
 a[b-d]e        ace     y       $&      ace
 a[b-d] aac     y       $&      ac
 a[-b]  a-      y       $&      a-
 a[b-]  a-      y       $&      a-
-a[b-a] -       c       -       Invalid [] range "b-a"
+a[b-a] -       c       -       Invalid [] range \"b-a\"
 a[]b   -       c       -       Unmatched [
 a[     -       c       -       Unmatched [
 a]     a]      y       $&      a]
@@ -139,7 +144,7 @@ a\  -       c       -       Search pattern not terminated
 a\(b   a(b     y       $&-$1   a(b-
 a\(*b  ab      y       $&      ab
 a\(*b  a((b    y       $&      a((b
-a\\b   a\b     y       $&      a\b
+a\\b   a\\b    y       $&      a\\b
 abc)   -       c       -       Unmatched )
 (abc   -       c       -       Unmatched (
 ((a))  abc     y       $&-$1-$2        a-a-a
@@ -240,8 +245,8 @@ multiple words      multiple words, yeah    y       $&      multiple words
 (.*)c(.*)      abcde   y       $&-$1-$2        abcde-ab-de
 \((.*), (.*)\) (a, b)  y       ($2, $1)        (b, a)
 [k]    ab      n       -       -
-abcd   abcd    y       $&-\$&-\\$&     abcd-$&-\abcd
-a(bc)d abcd    y       $1-\$1-\\$1     bc-$1-\bc
+abcd   abcd    y       $&-\$&-\\$&     abcd-\$&-\\abcd
+a(bc)d abcd    y       $1-\$1-\\$1     bc-\$1-\\bc
 a[-]?c ac      y       $&      ac
 (abc)\1        abcabc  y       $1      abc
 ([a-c]*)\1     abcabc  y       $1      abc
@@ -305,7 +310,7 @@ a[-]?c      ac      y       $&      ac
 'a[b-d]'i      AAC     y       $&      AC
 'a[-b]'i       A-      y       $&      A-
 'a[b-]'i       A-      y       $&      A-
-'a[b-a]'i      -       c       -       Invalid [] range "b-a"
+'a[b-a]'i      -       c       -       Invalid [] range \"b-a\"
 'a[]b'i        -       c       -       Unmatched [
 'a['i  -       c       -       Unmatched [
 'a]'i  A]      y       $&      A]
@@ -326,7 +331,7 @@ a[-]?c      ac      y       $&      ac
 'a\(b'i        A(B     y       $&-$1   A(B-
 'a\(*b'i       AB      y       $&      AB
 'a\(*b'i       A((B    y       $&      A((B
-'a\\b'i        A\B     y       $&      A\B
+'a\\b'i        A\\B    y       $&      A\\B
 'abc)'i        -       c       -       Unmatched )
 '(abc'i        -       c       -       Unmatched (
 '((a))'i       ABC     y       $&-$1-$2        A-A-A
@@ -388,8 +393,8 @@ a[-]?c      ac      y       $&      ac
 '(.*)c(.*)'i   ABCDE   y       $&-$1-$2        ABCDE-AB-DE
 '\((.*), (.*)\)'i      (A, B)  y       ($2, $1)        (B, A)
 '[k]'i AB      n       -       -
-'abcd'i        ABCD    y       $&-\$&-\\$&     ABCD-$&-\ABCD
-'a(bc)d'i      ABCD    y       $1-\$1-\\$1     BC-$1-\BC
+'abcd'i        ABCD    y       $&-\$&-\\$&     ABCD-\$&-\\ABCD
+'a(bc)d'i      ABCD    y       $1-\$1-\\$1     BC-\$1-\\BC
 'a[-]?c'i      AC      y       $&      AC
 '(abc)\1'i     ABCABC  y       $1      ABC
 '([a-c]*)\1'i  ABCABC  y       $1      ABC
@@ -924,3 +929,136 @@ ab(?i)cd  abCd    y       -       -
 (??{}) 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
+X(A|B||C|D)Y   XXXYYY  y       $&      XY      # Trie w/ NOTHING
+(?i:X([A]|[B]|y[Y]y|[D]|)Y)    XXXYYYB y       $&      XY      # Trie w/ NOTHING
+^([a]{1})*$    aa      y       $1      a
+a(?!b(?!c))(..)        abababc y       $1      bc      # test nested negatives
+a(?!b(?=a))(..)        abababc y       $1      bc      # test nested lookaheads
+a(?!b(?!c(?!d(?!e))))...(.)    abxabcdxabcde   y       $1      e
+X(?!b+(?!(c+)*(?!(c+)*d))).*X  aXbbbbbbbcccccccccccccaaaX      y       -       -
+^(XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P):       ZEQQQQQQQQQQQQQQQQQQP:  y       $1      ZEQQQQQQQQQQQQQQQQQQP
+^(XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P):       ZEQQQX: y       $1      ZEQQQX
+^([TUV]+|XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P):        ZEQQQQQQQQQQQQQQQQQQP:  y       $1      ZEQQQQQQQQQQQQQQQQQQP
+^([TUV]+|XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P):        ZEQQQX: y       $1      ZEQQQX
+^([TUV]+|XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P|[MKJ]):  ZEQQQQQQQQQQQQQQQQQQP:  y       $1      ZEQQQQQQQQQQQQQQQQQQP
+^([TUV]+|XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P|[MKJ]):  ZEQQQX: y       $1      ZEQQQX
+^(XXX|YYY|Z.Q*X|Z[TE]Q*P):     ZEQQQQQQQQQQQQQQQQQQP:  y       $1      ZEQQQQQQQQQQQQQQQQQQP
+^(XXX|YYY|Z.Q*X|Z[TE]Q*P):     ZEQQQX: y       $1      ZEQQQX
+^([TUV]+|XXX|YYY|Z.Q*X|Z[TE]Q*P):      ZEQQQQQQQQQQQQQQQQQQP:  y       $1      ZEQQQQQQQQQQQQQQQQQQP
+^([TUV]+|XXX|YYY|Z.Q*X|Z[TE]Q*P):      ZEQQQX: y       $1      ZEQQQX
+^([TUV]+|XXX|YYY|Z.Q*X|Z[TE]Q*P|[MKJ]):        ZEQQQQQQQQQQQQQQQQQQP:  y       $1      ZEQQQQQQQQQQQQQQQQQQP
+^([TUV]+|XXX|YYY|Z.Q*X|Z[TE]Q*P|[MKJ]):        ZEQQQX: y       $1      ZEQQQX
+X(?:ABCF[cC]x*|ABCD|ABCF):(?:DIT|DID|DIM)      XABCFCxxxxxxxxxx:DIM    y       $&      XABCFCxxxxxxxxxx:DIM
+(((ABCD|ABCE|ABCF)))(A|B|C[xy]*):      ABCFCxxxxxxxxxx:DIM     y       $&      ABCFCxxxxxxxxxx:
+(?=foo)        foo     y       pos     0
+(?=foo)        XfooY   y       pos     1
+.*(?=foo)      XfooY   y       pos     1
+(?<=foo)       foo     y       pos     3
+(?<=foo)       XfooY   y       pos     4
+.*(?<=foo)     foo     y       pos     3
+.*(?<=foo)     XfooY   y       pos     4
+(?<=foo)Y      XfooY   y       pos     5
+o(?<=foo)Y     ..XfooY..       y       pos     7
+X(?=foo)f      ..XfooY..       y       pos     4
+X(?=foo)       ..XfooY..       y       pos     3
+X(?<=foo.)[YZ] ..XfooXY..      y       pos     8
+(?=XY*foo)     Xfoo    y       pos     0
+^(?=XY*foo)    Xfoo    y       pos     0
+^(??{"a+"})a   aa      y       $&      aa
+^(?:(??{"a+"})|b)a     aa      y       $&      aa
+^(??{chr 0x100}).$     \x{100}\x{100}  y       $&      \x{100}\x{100}
+^(??{q(\x{100})}).     \x{100}\x{100}  y       $&      \x{100}\x{100}
+^(??{q(.+)})\x{100}    \x{100}\x{100}  y       $&      \x{100}\x{100}
+^(??{q(.)})\x{100}     \x{100}\x{100}  y       $&      \x{100}\x{100}
+^(??{chr 0x100})\xbb   \x{100}\x{bb}   y       $&      \x{100}\x{bb}
+^(.)(??{"(.)(.)"})(.)$ abcd    y       $1-$2   a-d
+^(.)(??{"(bz+|.)(.)"})(.)$     abcd    y       $1-$2   a-d
+^(.)((??{"(.)(cz+)"})|.)       abcd    y       $1-$2   a-b
+^a(?>(??{q(b)}))(??{q(c)})d    abcd    y       -       -
+^x(??{""})+$   x       y       $&      x
+^(<(?:[^<>]+|(?3)|(?1))*>)()(!>!>!>)$  <<!>!>!>><>>!>!>!>      y       $1      <<!>!>!>><>>
+^(<(?:[^<>]+|(?1))*>)$ <<><<<><>>>>    y       $1      <<><<<><>>>>
+((?2)*)([fF]o+)        fooFoFoo        y       $1-$2   fooFo-Foo
+(<(?:[^<>]+|(?R))*>)   <<><<<><>>>>    y       $1      <<><<<><>>>>
+(?<n>foo|bar|baz)      snofooewa       y       $1      foo
+(?<n>foo|bar|baz)      snofooewa       y       $+{n}   foo
+(?<n>foo|bar|baz)(?<m>[ew]+)   snofooewa       y       $+{n}   foo
+(?<n>foo|bar|baz)(?<m>[ew]+)   snofooewa       y       $+{m}   ew
+(?<n>foo)|(?<n>bar)|(?<n>baz)  snofooewa       y       $+{n}   foo
+(?<n>foo)(??{ $+{n} }) snofooefoofoowaa        y       $+{n}   foo
+/(?'n'foo|bar|baz)/    snofooewa       y       $1      foo
+/(?'n'foo|bar|baz)/    snofooewa       y       $+{n}   foo
+/(?'n'foo|bar|baz)(?'m'[ew]+)/ snofooewa       y       $+{n}   foo
+/(?'n'foo|bar|baz)(?'m'[ew]+)/ snofooewa       y       $+{m}   ew
+/(?'n'foo)|(?'n'bar)|(?<n>baz)/        snobazewa       y       $+{n}   baz
+/(?'n'foo)(??{ $+{n} })/       snofooefoofoowaa        y       $+{n}   foo
+/(?'n'foo)\k<n>/       ..foofoo..      y       $1      foo
+/(?'n'foo)\k<n>/       ..foofoo..      y       $+{n}   foo
+/(?<n>foo)\k'n'/       ..foofoo..      y       $1      foo
+/(?<n>foo)\k'n'/       ..foofoo..      y       $+{n}   foo
+/(?:(?<n>foo)|(?<n>bar))\k<n>/ ..barbar..      y       $+{n}   bar
+/^(?'main'<(?:[^<>]+|(?&crap)|(?&main))*>)(?'empty')(?'crap'!>!>!>)$/  <<!>!>!>><>>!>!>!>      y       $+{main}        <<!>!>!>><>>
+/^(?'main'<(?:[^<>]+|(?&main))*>)$/    <<><<<><>>>>    y       $1      <<><<<><>>>>
+/(?'first'(?&second)*)(?'second'[fF]o+)/       fooFoFoo        y       $+{first}-$+{second}    fooFo-Foo
+(?<A>foo)?(?(<A>)bar|nada)     foobar  y       $+{A}   foo
+(?<A>foo)?(?(<A>)bar|nada)     foo-barnada     y       $&      nada
+(?<A>foo)?(?(1)bar|nada)       foo-barnada     y       $&      nada
+(?<A>foo(?(R)bar))?(?1)        foofoobar       y       $1      foo
+(?<A>foo(?(R)bar))?(?1)        foofoobar       y       $&      foofoobar
+(x)(?<A>foo(?(R&A)bar))?(?&A)  xfoofoobar      y       $2      foo
+(x)(?<A>foo(?(R&A)bar))?(?&A)  xfoofoobar      y       $&      xfoofoobar
+(x)(?<A>foo(?(R2)bar))?(?&A)   xfoofoobar      y       $2      foo
+(x)(?<A>foo(?(R2)bar))?(?&A)   xfoofoobar      y       $&      xfoofoobar
+(?1)(?(DEFINE)(blah))  blah    y       $&      blah
+/^(?<PAL>(?<CHAR>.)((?&PAL)|.?)\k<CHAR>)$/     madamimadam     y       $&      madamimadam
+/^(?<PAL>(?<CHAR>.)((?&PAL)|.?)\k<CHAR>)$/     madamiamadam    n       -       -
+/(a)?((?1))(fox)/      aafox   y       $1-$2-$3        a-a-fox
+/(a)*((?1))(fox)/      aafox   y       $1-$2-$3        a-a-fox
+/(a)+((?1))(fox)/      aafox   y       $1-$2-$3        a-a-fox
+/(a){1,100}((?1))(fox)/        aafox   y       $1-$2-$3        a-a-fox
+/(a){0,100}((?1))(fox)/        aafox   y       $1-$2-$3        a-a-fox
+/(ab)?((?1))(fox)/     ababfox y       $1-$2-$3        ab-ab-fox
+/(ab)*((?1))(fox)/     ababfox y       $1-$2-$3        ab-ab-fox
+/(ab)+((?1))(fox)/     ababfox y       $1-$2-$3        ab-ab-fox
+/(ab){1,100}((?1))(fox)/       ababfox y       $1-$2-$3        ab-ab-fox
+/(ab){0,100}((?1))(fox)/       ababfox y       $1-$2-$3        ab-ab-fox