description = '''
expected internal representation
'''
[[test]]
name = 'lookahead_lift_anchor'
pattern = '(?=^keychain:\s)'
pp = '(?<=_*(\A|\n))(?=keychain:[\t-\r ]_*)'
[[test]]
name = 'foo_anch'
pattern = '^_*foo_*$'
pp = "_*foo_*"
[[test]]
pattern = 'a(?!b).*(?<!a)b'
pp = '❮a(?=~(b_*)\z){∅}❮.*❯❯(?<=(\A|[^a]))b'
[[test]]
pattern = 'aa(?!a) *'
pp = 'aa(?=~(a_*)\z){∅}❮ *❯'
[[test]]
pattern = '\s'
pp = '[\t-\r ]'
[[test]]
name = 'anchor_line_star'
pattern = '^abc.*$'
pp = '(?<=_*(\A|\n))abc.*(?=(\z|\n)_*)'
ts_rev = '_*cba(?=(\z|\n)_*)'
[[test]]
name = 'anchor_line_literal'
pattern = '^abc$'
pp = '(?<=_*(\A|\n))abc(?=(\z|\n)_*)'
ts_rev = '_*(\A|\n)cba(?=(\z|\n)_*)'
[[test]]
name = 'anchor_line_digit_star'
pattern = '^\d+$'
pp = '(?<=_*(\A|\n))[0-9]+(?=(\z|\n)_*)'
ts_rev = '_*(\A|\n)[0-9]*[0-9](?=(\z|\n)_*)'
[[test]]
name = 'anchor_line_star_leading'
pattern = '^.*abc$'
pp = '(?<=_*(\A|\n)).*abc(?=(\z|\n)_*)'
ts_rev = '_*(\A|\n)cba.*(?=(\z|\n)_*)'
[[test]]
name = 'neg_la'
pattern = '(?!a).'
pp = '[^\na]'
[[test]]
name = 'neg_la_single_byte'
pattern = 'b(?!a)'
pp = 'b(?=~(a_*)\z)'
ts_rev = '(\Ab|_*[^a]b)'
[[test]]
name = 'neg_la_ascii_word_class'
pattern = 'x(?![a-zA-Z0-9_])'
pp = 'x(?=~([0-9A-Z\_a-z]_*)\z)'
ts_rev = '(\Ax|_*[^0-9A-Z\_a-z]x)'
[[test]]
name = 'end_anchor_then_literal'
pattern = '\za'
pp = '⊥'
[[test]]
name = 'end_anchor_then_literal_after_prefix'
pattern = 'a\zb'
pp = '⊥'
[[test]]
name = 'end_anchor_then_class'
pattern = '\z[abc]'
pp = '⊥'
[[test]]
name = 'la_peel_drop'
pattern = '(?=a).'
pp = 'a'
[[test]]
name = 'la_peel_unsat_single'
pattern = '(?=a)b'
pp = '⊥'
[[test]]
name = 'la_peel_unsat_two'
pattern = '(?=ab)cd'
pp = '⊥'
[[test]]
name = 'la_peel_cascade_full'
pattern = '(?=abc)...'
pp = 'abc'
[[test]]
name = 'la_peel_partial'
pattern = '(?=a)..'
pp = 'a.'
[[test]]
name = 'la_peel_class_intersect'
pattern = '(?=[ab])[bc]'
pp = 'b'
[[test]]
name = 'la_peel_class_disjoint'
pattern = '(?=[ab])[cd]'
pp = '⊥'
[[test]]
name = 'la_peel_neg'
pattern = '$STRING:string'
pp = '⊥'
[[test]]
name = 'neg_la_then_dotstar'
pattern = 'a(?!b)(.*)'
pp = 'a(?=~(b_*)\z){∅}❮.*❯'
[[test]]
name = 'not_word_boundary_word_word'
pattern = 'a\Bb'
pp = 'ab'
[[test]]
name = 'not_word_boundary_word_nonword'
pattern = 'a\B b'
pp = '⊥'
[[test]]
name = 'not_word_boundary_before_upper_run_ascii_check'
pattern = '\B(?=[A-Z]{2,})'
pp = '(?<=_*([0-9A-Z\_a-z]|\xC2[\xAA\xB5\xBA]|\xC3[\x80-\x96\x98-\xB6\xB8-\xBF]|[\xC4-\xCA][\x80-\xBF]|\xCB[\x80\x81\x86-\x91\xA0-\xA4\xAC\xAE]|\xCC[\x80-\xBF]|\xCD[\x80-\xB4\xB6\xB7\xBA-\xBD\xBF]|\xCE[\x86\x88-\x8A\x8C\x8E-\xA1\xA3-\xBF]|\xCF[\x80-\xB5\xB7-\xBF]|[\xD0\xD1][\x80-\xBF]|\xD2[\x80\x81\x83-\xBF]|\xD3[\x80-\xBF]|\xD4[\x80-\xAF\xB1-\xBF]|\xD5[\x80-\x96\x99\xA0-\xBF]|\xD6[\x80-\x88\x91-\xBD\xBF]|\xD7[\x81\x82\x84\x85\x87\x90-\xAA\xAF-\xB2]|\xD8[\x90-\x9A\xA0-\xBF]|\xD9[\x80-\xA9\xAE-\xBF]|\xDA[\x80-\xBF]|\xDB[\x80-\x93\x95-\x9C\x9F-\xA8\xAA-\xBC\xBF]|\xDC[\x90-\xBF]|\xDD[\x80-\x8A\x8D-\xBF]|\xDE[\x80-\xB1]|\xDF[\x80-\xB5\xBA\xBD]))(?=[A-Z][A-Z]_*)'
[[test]]
name = 'not_word_boundary_thousands_sep'
pattern = '\B(?!\.\d*)(?=(\d{3})+(?!\d))'
pp = '(?<=_*([0-9A-Z\_a-z]|\xC2[\xAA\xB5\xBA]|\xC3[\x80-\x96\x98-\xB6\xB8-\xBF]|[\xC4-\xCA][\x80-\xBF]|\xCB[\x80\x81\x86-\x91\xA0-\xA4\xAC\xAE]|\xCC[\x80-\xBF]|\xCD[\x80-\xB4\xB6\xB7\xBA-\xBD\xBF]|\xCE[\x86\x88-\x8A\x8C\x8E-\xA1\xA3-\xBF]|\xCF[\x80-\xB5\xB7-\xBF]|[\xD0\xD1][\x80-\xBF]|\xD2[\x80\x81\x83-\xBF]|\xD3[\x80-\xBF]|\xD4[\x80-\xAF\xB1-\xBF]|\xD5[\x80-\x96\x99\xA0-\xBF]|\xD6[\x80-\x88\x91-\xBD\xBF]|\xD7[\x81\x82\x84\x85\x87\x90-\xAA\xAF-\xB2]|\xD8[\x90-\x9A\xA0-\xBF]|\xD9[\x80-\xA9\xAE-\xBF]|\xDA[\x80-\xBF]|\xDB[\x80-\x93\x95-\x9C\x9F-\xA8\xAA-\xBC\xBF]|\xDC[\x90-\xBF]|\xDD[\x80-\x8A\x8D-\xBF]|\xDE[\x80-\xB1]|\xDF[\x80-\xB5\xBA\xBD]))(?=([0-9][0-9][0-9]([0-9]{3})*~([0-9]_*)\z&~(\._*)\z))'
[[test]]
name = 'leading_union_lb_in_concat'
pattern = '(^|x)--y'
pp = '((?<=_*(\A|\n))|x)\-\-y'
[[test]]
name = 'utf8_codepoint'
pattern = '\p{utf8}'
pp = '([\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF][\x80-\xBF]|[\xF0-\xF7][\x80-\xBF]{3})'
[[test]]
name = 'utf8_constrained_complement'
pattern = '~(_*abc_*)&\p{utf8}*'
pp = '(~(_*abc_*)&([\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF][\x80-\xBF]|[\xF0-\xF7][\x80-\xBF]{3})*)'