# This set of tests is run only with the 8-bit library. It tests the POSIX
# interface, which is supported only with the 8-bit library. This test should
# not be run with JIT (which is not available for the POSIX interface).
    
#forbid_utf
#pattern posix

# Test invalid options

/abc/auto_callout
** Ignored with POSIX interface: auto_callout

/abc/
   abc\=find_limits
** Ignored with POSIX interface: find_limits
 0: abc

/abc/
  abc\=partial_hard
** Ignored with POSIX interface: partial_hard
 0: abc

# Real tests

/abc/
    abc
 0: abc

/^abc|def/
    abcdef
 0: abc
    abcdef\=notbol
 0: def

/.*((abc)$|(def))/
    defabc
 0: defabc
 1: abc
 2: abc
    defabc\=noteol
 0: def
 1: def
 3: def

/the quick brown fox/
    the quick brown fox
 0: the quick brown fox
\= Expect no match
    The Quick Brown Fox
No match: POSIX code 17: match failed

/the quick brown fox/i
    the quick brown fox
 0: the quick brown fox
    The Quick Brown Fox
 0: The Quick Brown Fox

/(*LF)abc.def/
\= Expect no match
    abc\ndef
No match: POSIX code 17: match failed

/(*LF)abc$/
    abc
 0: abc
    abc\n
 0: abc

/(abc)\2/
Failed: POSIX code 15: bad back reference at offset 6     

/(abc\1)/
\= Expect no match
    abc
No match: POSIX code 17: match failed

/a*(b+)(z)(z)/
    aaaabbbbzzzz
 0: aaaabbbbzz
 1: bbbb
 2: z
 3: z
    aaaabbbbzzzz\=ovector=0
Matched without capture
    aaaabbbbzzzz\=ovector=1
 0: aaaabbbbzz
    aaaabbbbzzzz\=ovector=2
 0: aaaabbbbzz
 1: bbbb

/(*ANY)ab.cd/
    ab-cd
 0: ab-cd
    ab=cd
 0: ab=cd
\= Expect no match
    ab\ncd
No match: POSIX code 17: match failed

/ab.cd/s
    ab-cd
 0: ab-cd
    ab=cd
 0: ab=cd
    ab\ncd
 0: ab\x0acd

/a(b)c/posix_nosub
    abc
Matched with REG_NOSUB

/a(?P<name>b)c/posix_nosub
    abc
Matched with REG_NOSUB

/(a)\1/posix_nosub
    zaay
Matched with REG_NOSUB

/a?|b?/
    abc
 0: a
\= Expect no match
    ddd\=notempty
No match: POSIX code 17: match failed

/\w+A/
   CDAAAAB
 0: CDAAAA

/\w+A/ungreedy
   CDAAAAB
 0: CDA
   
/\Biss\B/I,aftertext
** Ignored with POSIX interface: info
    Mississippi
 0: iss
 0+ issippi

/abc/\
Failed: POSIX code 9: bad escape sequence at offset 3     

"(?(?C)"
Failed: POSIX code 11: unbalanced () at offset 6     

"(?(?C))"
Failed: POSIX code 3: pattern error at offset 2     

/abcd/substitute_extended
** Ignored with POSIX interface: substitute_extended

/\[A]{1000000}**/expand,regerror_buffsize=31
Failed: POSIX code 4: ? * + invalid at offset 100000
** regerror() message truncated

/\[A]{1000000}**/expand,regerror_buffsize=32
Failed: POSIX code 4: ? * + invalid at offset 1000001

# End of testdata/testinput18
