3
dX                @   s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZG dd deZ	G dd de
ZG dd dejZd	d
 Zedkre  dS )    )proxyNc                   s   e Zd Z fddZ  ZS )StrSubclassc                s   t t j|S )N)r   super__getitem__)selfindex)	__class__ 1/tmp/pip-build-v9q4h5k9/regex/regex/test_regex.pyr      s    zStrSubclass.__getitem__)__name__
__module____qualname__r   __classcell__r	   r	   )r   r
   r   
   s   r   c                   s   e Zd Z fddZ  ZS )BytesSubclassc                s   t t j|S )N)r   r   r   )r   r   )r   r	   r
   r      s    zBytesSubclass.__getitem__)r   r   r   r   r   r	   r	   )r   r
   r      s   r   c               @   s  e Zd ZdZdZdZdZdZdZdZ	dZ
dZd	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdddZdd Zd d! Z d"d# Z!d$d% Z"d&d' Z#d(d) Z$d*d+ Z%d,d- Z&d.d/ Z'd0d1 Z(d2d3 Z)d4d5 Z*d6d7 Z+d8d9 Z,d:d; Z-d<d= Z.d>d? Z/d@dA Z0dBdC Z1dDdE Z2dFdG Z3dHdI Z4dJdK Z5dLdM Z6dNdO Z7dPdQ Z8dRdS Z9dTdU Z:dVdW Z;dXdY Z<dZd[ Z=d\d] Z>d^d_ Z?d`da Z@dbdc ZAddde ZBdfdg ZCdhdi ZDdjdk ZEdldm ZFdndo ZGdpdq ZHdrds ZIdtdu ZJdvdw ZKdxdy ZLdzd{ ZMd|d} ZNd~d ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd ZpddÄ Zqddń ZrddǄ ZsddɄ Ztdd˄ Zudd̈́ Zvddτ Zwddф Zxddӄ ZyddՄ Zzddׄ Z{ddل Z|ddۄ Z}dd݄ Z~dd߄ Zdd Zdd Zdd Zdd ZdS )
RegexTestsz<class '_regex.Pattern'>z5cannot process flags argument with a compiled patternzinvalid group referencez	missing >zbad character in group namezmissing group namez	missing <zunknown groupzbad escape \(end of pattern\)zbad escape \\zunterminated character setz2cannot use a string pattern on a bytes-like objectz2cannot use a bytes pattern on a string-like objectz"expected str instance, bytes foundz'expected a bytes-like object, str foundz,cannot use UNICODE flag with a bytes patternz9ASCII, LOCALE and UNICODE flags are mutually incompatiblez
missing \)zunbalanced parenthesiszbad character rangeznothing to repeatzmultiple repeatzcannot refer to an open groupzduplicate groupz'bad inline flags: cannot turn flags offzundefined character nameNc                s,   j ||   fdd|| d S )Nc                sL   t |ttfr2x8t| |D ]\}}|| qW njt| t|  d S )N)
isinstancetuplelistzipZassertIstype)actualexpectxy)msgrecurser   r	   r
   r   2   s    z,RegexTests.assertTypedEqual.<locals>.recurse)assertEqual)r   r   r   r   r	   )r   r   r   r
   assertTypedEqual/   s    zRegexTests.assertTypedEqualc             C   s6   d}t jd}t|}|jd|jdkr2| j  d S )NZQabbbcRzab+c)regexcompiler   findallfail)r   sr   r   r	   r	   r
   test_weakref;   s
    
zRegexTests.test_weakrefc             C   s   | j tjddjdd | j tjddj d | j tjddjdd | j tjddj d | j tjd	d
d  | j tjddjdd | j tjddj d | j tjddjdd | j tjddj d | j tjddd  d S )Nza*xxxr   zx*Zaxxzx+      r   aaaZxxxaza+)r   r   )r   r   )r%   r&   )r%   r&   )r   r   )r   r   )r   r&   )r   r&   )r   r   searchspanmatch)r   r	   r	   r
   test_search_star_plusB   s    z RegexTests.test_search_star_plusc             C   s   t |d }t|d S )Nr   r%   )intstr)r   ZmatchobjZ	int_valuer	   r	   r
   bump_numN   s    zRegexTests.bump_numc             C   s  | j tjdddd | j tjd| jdd | j tjd| jddd	 | j tjd
dd dd | j tjd
ddd | j tjdddd | j tjdddd | j tjdddd | j tjdddd | j tjdddd | j tjdddd | j tjdddtdtd td td td td   | j tjd!d"d#d$ | j tjdd%dd | j tjdd&dd | j tjdd'dd | j tjdd(dd) | j tjd*d+d*d, d S )-Nz(?i)b+r   z	bbbb BBBBzx xz\d+z08.2 -2 23x99yz9.3 -3 24x100yr&   z9.3 -3 23x99y.c             S   s   dS )Nz\nr	   )mr	   r	   r
   <lambda>Y   s    z1RegexTests.test_basic_regex_sub.<locals>.<lambda>z\n
z(?P<a>x)z
\g<a>\g<a>xxZxxxxz
\g<a>\g<1>z
(?P<unk>x)z\g<unk>\g<unk>z
\g<1>\g<1>az\t\n\v\r\f\a\bz	
z	
	   
               z^\s*XtestZXtestz\x0Az\u000Az
\U0000000Az\N{LATIN CAPITAL LETTER A}A   xs   \x0A   
)r   r   subr.   chr)r   r	   r	   r
   test_basic_regex_subR   s.    2
zRegexTests.test_basic_regex_subc             C   s   | j tjdddd d S )Nz
(?P<unk>x)z\g<1>\g<1>\br3   zxxxx)r   r   r@   )r   r	   r	   r
   test_bug_449964q   s    zRegexTests.test_bug_449964c             C   s\   | j tjdddd | j tjdddd | j tjdddd | j tjdddd d S )Nz\r\nz\nz
abc
def
zabc
def
z
r2   )r   r   r@   )r   r	   r	   r
   test_bug_449000v   s    zRegexTests.test_bug_449000c                sn   t jd | jt| j fdd | jt| j fdd | jt| j fdd | jt| j fdd d S )Nr/   c                  s   t j dt jS )Nr=   )r   r*   Ir	   )patternr	   r
   r1      s    z*RegexTests.test_bug_1661.<locals>.<lambda>c                  s   t j dt jS )Nr=   )r   r(   rE   r	   )rF   r	   r
   r1      s    c                  s   t j dt jS )Nr=   )r   r    rE   r	   )rF   r	   r
   r1      s    c                  s   t j t jS )N)r   r   rE   r	   )rF   r	   r
   r1      s    )r   r   assertRaisesRegex
ValueErrorFLAGS_WITH_COMPILED_PAT)r   r	   )rF   r
   test_bug_1661   s    




zRegexTests.test_bug_1661c             C   s    | j tttjd| j d S )Nz(?P<quote>)(?(quote)))r   reprr   r   r   PATTERN_CLASS)r   r	   r	   r
   test_bug_3629   s    zRegexTests.test_bug_3629c             C   s  | j tjdddd | j tjdddd | j tjdddd | j tjdddd7 | j tjdd	dd8 | j tjdddd | j tjdddd | j tjdddd | j tjdddd9 | j tjdddd | j tjdddd | j tjdddd: | j tjdddd; | j tjdddd< | j tjdddd | j tjdddd | j tjdddd | j tjdd dd! | jtj| jd"d#  | jtj| jd$d#  | jtj| jd%d#  | jtj| jd&d#  | jtj| jd'd#  | jtj| jd(d#  | jtj| jd)d#  | jtj| jd*d#  | jtj| jd+d#  | jtj| jd,d#  | jtj| jd-d#  | jtj| jd.d#  | j tjd/d0dd | j tjd1d2d3d4 | j tjd1d5d3d6 d S )=Nr   z\0 z\000z\001z\0088z\0099z\111rE   z\117Oz\1111I11z\00z\07z\08z\09z\0ar4   z\400u   Āz\777u   ǿr>   s   \400    s   \777   c               S   s   t jdddS )Nr   z\1)r   r@   r	   r	   r	   r
   r1      s    z=RegexTests.test_sub_template_numeric_escape.<locals>.<lambda>c               S   s   t jdddS )Nr   z\8)r   r@   r	   r	   r	   r
   r1      s    c               S   s   t jdddS )Nr   z\9)r   r@   r	   r	   r	   r
   r1      s    c               S   s   t jdddS )Nr   z\11)r   r@   r	   r	   r	   r
   r1      s    c               S   s   t jdddS )Nr   z\18)r   r@   r	   r	   r	   r
   r1      s    c               S   s   t jdddS )Nr   z\1a)r   r@   r	   r	   r	   r
   r1      s    c               S   s   t jdddS )Nr   z\90)r   r@   r	   r	   r	   r
   r1      s    c               S   s   t jdddS )Nr   z\99)r   r@   r	   r	   r	   r
   r1      s    c               S   s   t jdddS )Nr   z\118)r   r@   r	   r	   r	   r
   r1      s    c               S   s   t jdddS )Nr   z\11a)r   r@   r	   r	   r	   r
   r1      s    c               S   s   t jdddS )Nr   z\181)r   r@   r	   r	   r	   r
   r1      s    c               S   s   t jdddS )Nr   z\800)r   r@   r	   r	   r	   r
   r1      s    z(((((((((((x)))))))))))z\11z((((((((((y))))))))))(.)z\118xyzZxz8z\11aZxzaz 8z 9rS   z 8z 9z a)r   r   r@   rG   errorINVALID_GROUP_REF)r   r	   r	   r
    test_sub_template_numeric_escape   sH    z+RegexTests.test_sub_template_numeric_escapec             C   s2   | j tjdddd | j tjddddd d S )Nr4   baaaaaZbbbbbr%   Zbaaaa)r   r   r@   )r   r	   r	   r
   test_qualified_re_sub   s    z RegexTests.test_qualified_re_subc             C   s   | j tjdddd d S )Nz(\S)\s+(\S)z\1 \2zhello  therezhello there)r   r   r@   )r   r	   r	   r
   test_bug_114660   s    zRegexTests.test_bug_114660c             C   sh   t jdkr"| jtjdddd n| jtjdddd | jtjd	ddd | jtjd
ddd d S )Nr&   r:   r   z(?V0)x*-Zabxdz-a-b--d-z-a-b-d-z(?V1)x*zx+zab-d)r&   r:   r   )sysversion_infor   r   r@   )r   r	   r	   r
   test_bug_462270   s
    
zRegexTests.test_bug_462270c             C   s*   d}| j tjd| d dj|d d S )N   ÿz(?P<z>a)abcr4   )r   r   r(   group)r   Z
group_namer	   r	   r
   test_bug_14462   s    zRegexTests.test_bug_14462c             C   s   | j tj| jdd  | j tj| jdd  | j tj| jdd  | j tj| jdd  | j tj| jdd  | j t| jdd  | j	tj
dd	d
d | j	tj
ddd
d | j tj| jdd  d S )Nc               S   s   t jdddS )Nz(?P<a>x)z\g<ar3   )r   r@   r	   r	   r	   r
   r1      s    z/RegexTests.test_symbolic_refs.<locals>.<lambda>c               S   s   t jdddS )Nz(?P<a>x)z\g<r3   )r   r@   r	   r	   r	   r
   r1      s    c               S   s   t jdddS )Nz(?P<a>x)z\gr3   )r   r@   r	   r	   r	   r
   r1      s    c               S   s   t jdddS )Nz(?P<a>x)z\g<a a>r3   )r   r@   r	   r	   r	   r
   r1      s    c               S   s   t jdddS )Nz(?P<a>x)z\g<1a1>r3   )r   r@   r	   r	   r	   r
   r1      s    c               S   s   t jdddS )Nz(?P<a>x)z\g<ab>r3   )r   r@   r	   r	   r	   r
   r1      s    z(?P<a>x)|(?P<b>y)z\g<b>r3    z\2c               S   s   t jdddS )Nz(?P<a>x)z\g<-1>r3   )r   r@   r	   r	   r	   r
   r1      s    )rG   r   rY   
MISSING_GTMISSING_GROUP_NAME
MISSING_LTBAD_GROUP_NAME
IndexErrorUNKNOWN_GROUP_Ir   r@   )r   r	   r	   r
   test_symbolic_refs   s    zRegexTests.test_symbolic_refsc             C   st   | j tjdddd | j tjdddd | j tjddd	d | j tjddd	d | j tjddd	dd d S )Nz(?i)b+r   z	bbbb BBBBx x   zb+x BBBBr%   rX   r   zb*xxxyxzx   xxxyz)rp   rq   )rr   r%   )rX   r   )rs   rt   )ru   rq   )r   r   subn)r   r	   r	   r
   test_re_subn   s
    zRegexTests.test_re_subnc             C   sR  | j tjdddddddg tjd&kr| j tjd
dddddddddg | j tjdddddddddddddddddg | j tjddddddddddg | j tjdddddd dddd dddd dd dg n|| j tjd
dddddg | j tjdddddddddg | j tjddddddg | j tjdddddddddg | j tjdddddddg | j tjdddd ddd dddd dd ddg | j tjdddddddg | j tjddddddg | j dd tjddD ddddg | j tjddddddg | j dd tjddD ddddg | j tjddddd ddd ddd dg
 | j dd tjddD ddd ddd ddd dg
 | j tjddddd ddd ddd dg
 | j dd tjddD ddd ddd ddd dg
 | j tjdddddddddg | j tjd ddd!d"dg | j tjd#ddd$d%dg d S )'N:z:a:b::crh   r4   r\   cr&   r:   r   z:*z(:*)z::z(?::*)z(:)*z([b:]+)z:b::z(b)|(:+)z(?:b)|(?::+)r   xaxbxcc             S   s   g | ]}|qS r	   r	   ).0r0   r	   r	   r
   
<listcomp>  s    z,RegexTests.test_re_split.<locals>.<listcomp>z(?r)xc             S   s   g | ]}|qS r	   r	   )r{   r0   r	   r	   r
   r|     s    z(x)|(y)c             S   s   g | ]}|qS r	   r	   )r{   r0   r	   r	   r
   r|   $  s    z(?r)(x)|(y)c             S   s   g | ]}|qS r	   r	   )r{   r0   r	   r	   r
   r|   )  s    z(?V1)\bza b c z(?V1)\mza zb z(?V1)\Mz bz c)r&   r:   r   )r   r   splitra   rb   	splititer)r   r	   r	   r
   test_re_split   sV    
 


zRegexTests.test_re_splitc             C   s   | j tjddddddg | j tjdddddd	g | j tjd
dddddddg tjdkr| j tjddddddddg n | j tjddddddddg d S )Nrx   z:a:b::crq   rh   r4   zb::cza:b:c:dr\   zc:dz(:)r&   r:   r   z(:*)za:b::c)r&   r:   r   )r   r   r~   ra   rb   )r   r	   r	   r
   test_qualified_re_split3  s    
z"RegexTests.test_qualified_re_splitc             C   s  | j tjddg  | j tjdddddg | j tjdddddg | j tjdddd d!g | j tjd
ddg | j tjdddg | j tjdddg | j tjdddg | j tjdddg | j tjdddg | j tjddd"g | j tjddd#g d S )$Nz:+re   z
a:b::c:::drx   ::z:::z(:+)z(:)(:*)rh   z\((?P<test>.{0,5}?TEST)\)z	(MY TEST)zMY TESTz\((?P<test>.{0,3}?TEST)\)z\((?P<test>.{0,3}?T)\)z(MY T)zMY Tz[^a]{2}[A-Z]z
  Sz  Sz[^a]{2,3}[A-Z]z
   Sz   SzX(Y[^Y]+?){1,2}( |Q)+DEFzXYABCYPPQ
Q DEFYPPQ
r}   z(\nTest(\n+.+?){0,2}?)?\n+Endz
Test
xyz
xyz
End
Test
xyz
xyz
xyz)rx   rh   )rx   rx   )rx   r   )r   r}   )r   r   )r   r   r    )r   r	   r	   r
   test_re_findall@  s&    




zRegexTests.test_re_findallc             C   s   | j tjdddddg d S )	Nz(a|(b))abar4   rh   r\   )r4   rh   )r\   r\   )r4   rh   )r   r   r    )r   r	   r	   r
   test_bug_117612Y  s    zRegexTests.test_bug_117612c             C   s  | j tjddd d  d | j tjddd d  d | j tjddd d | j tjddd d | j tjddjddd tjd}| j |jdd d  d | j |jdd d  d | j |jdd d  d | j |jd	d d  d | j |jd	d d  d tjdd}| j |j d | j |jdd | j |jdd | j |jddd tjd
}| j |jdjdddd | j |jdjdddd | j |jdjdddd d S )Nr4   z(a)r   r%   z((a)|(b))(c)?r\   acry   bcz!(?:(?P<a1>a)|(?P<b2>b))(?P<c3>c)?rq   r&   Za1Zb2c3)r4   )r4   r4   )r4   r4   )r4   r4   r4   NN)r\   r\   Nr\   N)r   r4   r4   Nry   )r   r\   Nr\   ry   )r   r\   Nr\   ry   )r4   r4   )r4   NN)Nr\   N)r4   Nry   )r   r   r*   rf   r   )r   patr0   r	   r	   r
   test_re_match]  s*    

zRegexTests.test_re_matchc             C   s6  | j tjddd d  d | j tjddd d  d | j tjddd  | j tjddd  | j tjddd d  d | j tjdd
d d  d | j tjdd
d d  d | j tjddd d  d tjd}| j |jdd d  d | j |jdd d  d | j |jdd  | j |jdd  d S )Nz^(\()?([^()]+)(?(1)\))$(a)(r4   za)z(az^(?:(a)|c)((?(1)b|d))$abr\   cddz^(?:(a)|c)((?(1)|d))$rh   z(?P<g1>a)(?P<g2>b)?((?(g2)c|d))re   ry   adabdr   )r   r   r4   )r4   Nr4   )r   r4   r\   )r   Nr   )r   Nr   )r4   r4   rh   )re   r4   r\   ry   )r   r4   Nr   )r   r   r*   r   )r   pr	   r	   r
   test_re_groupref_existsx  s&    
z"RegexTests.test_re_groupref_existsc             C   s   | j tjddd d  d | j tjddd d  d | j tjddd  | j tjddd  | j tjdd	d d  d | j tjd
dd d  d | j tjdddg d S )Nz^(\|)?([^()]+)\1$|a||r4   z^(\|)?([^()]+)\1?$za|z|az^(?:(a)|c)(\1)$aaz^(?:(a)|c)(\1)?$ry   zE(?i)(.{1,40}?),(.{1,40}?)(?:;)+(.{1,80}).{1,40}?\3(\ |;)+(.{1,80}?)\1z&TEST, BEST; LEST ; Lest 123 Test, BestTEST BEST LESTr}   123 )r   r   r4   )r4   Nr4   )r   r4   r4   )ry   NN)r   r   r   r}   r   )r   r   r*   r    )r   r	   r	   r
   test_re_groupref  s    
zRegexTests.test_re_grouprefc             C   s"   | j tjddj ddd d S )Nz#(?P<first>first) (?P<second>second)zfirst secondfirstsecond)r   r   )r   r   r*   	groupdict)r   r	   r	   r
   test_groupdict  s    
zRegexTests.test_groupdictc             C   s   | j tjddjdd d S )Nz#(?P<first>first) (?P<second>second)zfirst secondz\2 \1 \g<second> \g<first>zsecond first second first)r   r   r*   expand)r   r	   r	   r
   test_expand  s    

zRegexTests.test_expandc             C   s  | j tjddd  | j tjddd  | j tjddd  | j tjddd  | j tjddd d | j tjd	dd d | j tjd
dd d | j tjddd d | j tjddd d | j tjddd d | j tjddd d | j tjddd d | j tjddd  | j tjddd  | j tjddd  | j tjddd  | j tjddd d | j tjddd d | j tjddd d | j tjddd d | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjd dd | j ttjd!dd | j ttjd"dd | j ttjddd | j tjd#dd  | j ttjd#d$d d S )%Nz	^(\w){1}$re   z
^(\w){1}?$z^(\w){1,2}$z^(\w){1,2}?$z	^(\w){3}$r%   ry   z^(\w){1,3}$z^(\w){1,4}$z^(\w){3,4}?$z
^(\w){3}?$z^(\w){1,3}?$z^(\w){1,4}?$z^x{1}$r$   z^x{1}?$z^x{1,2}$z	^x{1,2}?$z^x{1}r   r   z^x{1}?z^x{0,1}z^x{0,1}?rh   z^x{3}$Tz^x{1,3}$z^x{1,4}$z	^x{3,4}?$z^x{3}?$z	^x{1,3}?$z	^x{1,4}?$z^x{}$zx{})r   r   r*   bool)r   r	   r	   r
   test_repeat_minmax  s<    zRegexTests.test_repeat_minmaxc             C   s  | j tjdjd | j tjdjtjtjB tjB  | j tjdjtjtjB tjB  | j tjdj	d | j tjdj
i  | j tjdj
ddd | j tjddjd	 | j tjddjd | j tjd
djd	 | j tjd
djd | j tjd
dj d | j tjd
djdd | j tjddjd | j tjddjd | j tttjddj| j tjd}d	|j
d< | j |j
d d d S )Nz
(?i)(a)(b)s
   (?i)(a)(b)rq   z(?i)(?P<first>a)(?P<other>b)r%   )r   otherz(a)r4   r   zb(c)abcdef   r&   zabc(?P<n>def)n)r%   r&   )rq   r&   r   r%   r   r%   )r   r   )r   r   r   rF   flagsrE   UDEFAULT_VERSIONr=   groups
groupindexr*   posendposr(   r)   stringregsrK   r   rerL   )r   r   r	   r	   r
   test_getattr  s,    


zRegexTests.test_getattrc             C   s  | j tjddd d | j tjddd d | j tjddtjd d	 | j tjd
dtjd d	 | j tjddtjd d | j tjddtjd d | j tjddtjd d | j tjddtjd d | j tjddtjd  | j tjddd d	 | j tjd
dd d	 | j tjddtjd d | j tjddtjd d | j tjddtjd  | j tjddd d | j tjddtjd d | j tjddtjd d d S )Nz\b(b.)\bzabcd abc bcd bxr%   Zbxz\B(b.)\Bzabc bcd bc abxds   \b(b.)\bs   abcd abc bcd bxs   bxs   \B(b.)\Bs   abc bcd bc abxdz^abc$z
abc
r   re   z	^\Aabc\Z$s   ^abc$s   
abc
s   abcs	   ^\Aabc\Z$z\d\D\w\W\s\Sz1aa! as   \d\D\w\W\s\Ss   1aa! a)r   r   r(   LOCALEUNICODEM)r   r	   r	   r
   test_special_escapes  s8    zRegexTests.test_special_escapesc             C   s   | j tjddd d | j tjddtjd d | j djtjddtjdd | j djtjddtjdd | j djtjd	dtjdd d S )
Nz([\u2222\u2223])u   ∢r%   rh   r/   u   eèéêëēěė)r   z%[e\xe8\xe9\xea\xeb\u0113\u011b\u0117]z*e|\xe8|\xe9|\xea|\xeb|\u0113|\u011b|\u0117)r   r   r*   r   joinr    )r   r	   r	   r
   test_bigcharset  s    zRegexTests.test_bigcharsetc             C   s<   | j tjddtjd d | j tjddtjd d d S )Nza.bza
br   za.*bza

b)r   r   r*   DOTALL)r   r	   r	   r
   test_anyall  s    zRegexTests.test_anyallc             C   s  | j tjddd d | j tjddd d | j tjddd d | j tjddd d | j tjd	d
d d | j tjddd d | j tjdd
d d | j tjdd
d d | j tjddd d | j tjddd d | j tjddd d d S )Nz(a(?=\s[^a]))za br%   r4   z(a(?=\s[^a]*))z(a(?=\s[abc]))z(a(?=\s[abc]*))za bcz(a)(?=\s\1)za az(a)(?=\s\1*)za aaz(a)(?=\s(abc|a))z(a(?!\s[^a]))z(a(?!\s[abc]))za dz(a)(?!\s\1)z(a)(?!\s(abc|a)))r   r   r*   )r   r	   r	   r
   test_non_consuming   s    zRegexTests.test_non_consumingc             C   s  | j tjddtjd d | j tjddtjd d | j tjddtjd d | j tjd	d
tjd d
 | j tjddtjd d | j tjddtjd d | j tjddtjd d | j tjddtjd d | j tjddtjd d | j tjddj d | j tjddj d | j ttjddd | j ttjddd | j ttjddd | j ttjddd d S )Nre   ABCr   s   abcs   ABCz
(a\s[^a]*)za bbr%   z
(a\s[abc])za bz(a\s[abc]*)z	((a)\s\2)za az
((a)\s\2*)za aaz((a)\s(abc|a))z((a)\s(abc|a)*)z[Z-a]_z	(?i)[Z-a]z(?i)naoZnAoTz
(?i)n\xE3ou   nÃou   NÃOz(?i)su   ſ)r   r%   )r   r%   )r   r   r*   rE   r)   r   )r   r	   r	   r
   test_ignore_case.  s(    zRegexTests.test_ignore_casec             C   s  | j tjddj d8 | j tjddj d9 | j tjddj d: | j tjd	dj d; | j tjd
dj d< | j tjddj d= | j tjddj d> | j tjddj d? | j tjddj d@ | j tjddj dA | j tjd
dj dB | j tjddj dC | j tjddj dD | j tjddj dE | j tjddj dF | j tjddj dG | j tjddj dH | j tjddj dI d}x8|D ]0}x(|D ] }tjd| |s| j  qW qW | j ttjdd d! | j ttjdd"d! | j ttjd#d d! | j ttjd#d"d! | j ttjd$d d! | j ttjd%d d! | j ttjdd d! | j ttjd#d d! | j ttjd$d d! | j ttjd%d d! | j ttjd&dd! | j ttjd&dd! | j tjd'd(d)d*g | j tjd+d(d)d*g | j tjd,d-j dJ | j tjd/d-j dK | j tjd0d-j dL | j tjd1d2dgd3j dM | j tjd1d5d6gd3j dN d S )ONz(?fi)ssZSSr   rq   z(?fi)SSss   ßr%   z#(?fi)\N{LATIN SMALL LETTER SHARP S}z (?fi)\N{LATIN SMALL LIGATURE ST}ZSTz(?fi)STu   ﬆu   ﬅz(?fi)SSTu   ßtu   sﬅu   sﬆZSSTr&   z(?fi)FFIu   ﬃu   ﬀiu   fﬁz!(?fi)\N{LATIN SMALL LIGATURE FFI}ZFFIz!(?fi)\N{LATIN SMALL LIGATURE FF}iz!(?fi)f\N{LATIN SMALL LIGATURE FI}u   Σσςz(?fi)z(?iV1)ffu   ﬀﬁTu   ﬁﬀz(?iV1)fiz
(?iV1)fffiz(?iV1)f\uFB03z(?iV1)f\uFB01z/(?iV0)\m(?:word){e<=3}\M(?<!\m(?:word){e<=1}\M)z.word word2 word word3 word word234 word23 wordZword234Zword23z/(?iV1)\m(?:word){e<=3}\M(?<!\m(?:word){e<=1}\M)z$(?fi)a\N{LATIN SMALL LIGATURE FFI}nez
  affine     z*(?fi)a(?:\N{LATIN SMALL LIGATURE FFI}|x)nez+(?fi)a(?:\N{LATIN SMALL LIGATURE FFI}|xy)nez(?fi)a\L<options>neZaffine)optionsr   u   aﬃneffirt   )r   rq   )r   rq   )r   r%   )r   rq   )r   rq   )r   r%   )r   r%   )r   rq   )r   rq   )r   rq   )r%   r&   )r   rq   )r   r%   )r   rq   )r   rq   )r   r&   )r   r&   )r   r&   )rq   r   )rq   r   )rq   r   )r   r   )r   rt   )r   r   r(   r)   r*   r!   r   r    )r   sigmach1ch2r	   r	   r
   test_case_foldingH  s    























zRegexTests.test_case_foldingc             C   s   | j tjddd d d S )Nz(\s)r}   r%   )r   r   r*   )r   r	   r	   r
   test_category  s    zRegexTests.test_categoryc             C   s4   | j tjddd d | j tjddd d d S )Nz\s([^a])z br%   r\   z	\s([^a]*)z bbZbb)r   r   r(   )r   r	   r	   r
   test_not_literal  s    zRegexTests.test_not_literalc             C   s4   | j tjddd d | j tjddd d d S )Nz\s(b)z br%   r\   za\sza r   )r   r   r(   )r   r	   r	   r
   test_search_coverage  s    zRegexTests.test_search_coveragec             C   s   d}| j tj|| xjtddD ]\}|t|7 }| j ttjtjt|t|d | j tjtjt|t|j d q"W tjtj|}| j |j|j d d S )Nrh   r      Tr%   )r   r%   )r   r   )	r   r   escaperangerA   r   r*   r)   r   )r   r   ir   r	   r	   r
   test_re_escape  s      
zRegexTests.test_re_escapec             C   s   d}| j tj|| x`tddD ]R}t|g}||7 }| j ttjtj||d | j tjtj||j d q"W tjtj|}| j |j|j d d S )N    r   r   Tr%   )r   r%   )r   r   )	r   r   r   r   bytesr   r*   r)   r   )r   r   r   r\   r   r	   r	   r
   test_re_escape_byte  s    
"zRegexTests.test_re_escape_bytec             C   sh   t jt jkr| j  t jt jkr(| j  t jt jkr<| j  t jt j	krP| j  t j
t jkrd| j  d S )N)r   rE   
IGNORECASEr!   Lr   r   	MULTILINESr   r;   VERBOSE)r   r	   r	   r
   test_constants  s    zRegexTests.test_constantsc             C   sD   x>t jt jt jt jt jgD ]"}| jttt j	d|| j
 qW d S )Nz	^pattern$)r   rE   r   r;   r   r   r   rK   r   r   rL   )r   flagr	   r	   r
   
test_flags  s    zRegexTests.test_flagsc             C   s   xdD ]}| j ttjd	| t|d
 | j ttjd| t|d d
 | j ttjd| t|d d
 | j ttjd| t|d
 | j ttjd| t|d d
 | j ttjd| t|d d
 qW | jtj| jdd  d S )Nr   r          @            z\%03oTz\%03o00z\%03o8rP   z\x%02xz\x%02x0z\x%02xzzc               S   s   t jddS )Nz\911rh   )r   r*   r	   r	   r	   r
   r1     s    z8RegexTests.test_sre_character_literals.<locals>.<lambda>)r   r   r   r   r   r   r   r   )r   r   r   r*   rA   rG   rY   rZ   )r   r   r	   r	   r
   test_sre_character_literals  s    
  
z&RegexTests.test_sre_character_literalsc             C   s   xdD ]}| j ttjd	| t|d
 | j ttjd| t|d
 | j ttjd| t|d
 | j ttjd| t|d
 | j ttjd| t|d
 | j ttjd| t|d
 qW | jtj| jdd  d S )Nr   r   r   r   r   r   r   r   z[\%03o]Tz[\%03o0]z[\%03o8]z[\x%02x]z	[\x%02x0]z	[\x%02xz]c               S   s   t jddS )Nz[\911]rh   )r   r*   r	   r	   r	   r
   r1     s    z>RegexTests.test_sre_character_class_literals.<locals>.<lambda>)r   r   r   r   r   r   r   r   )r   r   r   r*   rA   rG   rY   BAD_OCTAL_ESCAPE)r   r   r	   r	   r
   !test_sre_character_class_literals  s    
     $z,RegexTests.test_sre_character_class_literalsc             C   sR   | j tjddjdd | j tjddjdd | j tjddjdd d S )	Nz(a)|(b)r\   r%   r   r   r   )r   r   )r   r   r*   startendr)   )r   r	   r	   r
   test_bug_113254  s    zRegexTests.test_bug_113254c             C   sr   | j tjddjd  | j tjddjd | j tjddjd | j tjddjd | j tjddjd d S )	Nz(a)?ar4   z(a)(b)?br   r%   z(?P<a>a)(?P<b>b)?bz(?P<a>a(b))z((a)))r   r   r*   	lastindex	lastgroup)r   r	   r	   r
   test_bug_527371  s    zRegexTests.test_bug_527371c             C   s   | j tj| jdd  d S )Nc               S   s
   t jdS )Nzfoo[a-)r   r   r	   r	   r	   r
   r1     s    z,RegexTests.test_bug_545855.<locals>.<lambda>)rG   r   rY   BAD_SET)r   r	   r	   r
   test_bug_545855  s    zRegexTests.test_bug_545855c             C   s   | j tjddd d jdd | j tjddd d	 dd  d
 jdd | j tjddd d jdd | j tjddd d jdd d S )Nz.*?ci'  r   r   r   i!N  z.*?cdi  ry   cdei#N  i N  re   deia  z(a|b)*?c)r   r   r*   r   r(   )r   r	   r	   r
   test_bug_418626  s    zRegexTests.test_bug_418626c             C   s,   dt jd d }| jt j|o"dd d S )N[u   ‹]r%   )r   r   r   r   )r   r   r	   r	   r
   test_bug_612074  s    zRegexTests.test_bug_612074c             C   s`   | j tjddd d d | j tjddd d d d | j tjddd d d d d S )Nz(x)*iP  r   r%   z(x)*yr   z(x)*?y)r   r   r*   )r   r	   r	   r
   test_stack_overflow  s     zRegexTests.test_stack_overflowc             C   s   dd }dd }dd }dd }t jd	|fd
|fd|fd|fdg}| jtt|jjdj| j | j|jddddddddddg	df d S )Nc             S   s   |S )Nr	   )scannertokenr	   r	   r
   s_ident   s    z(RegexTests.test_scanner.<locals>.s_identc             S   s   d| S )Nzop%sr	   )r   r   r	   r	   r
   
s_operator!  s    z+RegexTests.test_scanner.<locals>.s_operatorc             S   s   t |S )N)float)r   r   r	   r	   r
   s_float"  s    z(RegexTests.test_scanner.<locals>.s_floatc             S   s   t |S )N)r,   )r   r   r	   r	   r
   s_int#  s    z&RegexTests.test_scanner.<locals>.s_intz[a-zA-Z_]\w*z\d+\.\d*z\d+z=|\+|-|\*|/\s+rh   zsum = 3*foo + 312.50 + barsumzop=r&   zop*foozop+g     s@bar)r  N)	r   Scannerr   rK   r   r   rF   rL   scan)r   r   r   r   r  r   r	   r	   r
   test_scanner  s    zRegexTests.test_scannerc             C   sR   xLd	D ]D}| j tjd| dd d  d
 | j tjd| dd d  d qW d S )Nrh   ?*z
((.%s):)?zr   a:za:r4   )rh   r	  r
  )r   NN)r  r  r4   )r   r   r*   )r   opr	   r	   r
   test_bug_448951/  s
    
zRegexTests.test_bug_448951c             C   s   | j tjddd d  d | j tjddd d  d | j tjddd d  d | j tjd	dd d  d | j tjd
dd d  d | j tjddd d  d | j tjddd d  d | j tjddd d  d d S )Nz	^((a)|b)*re   r   r\   r4   z^(([ab])|c)*ry   z^((d)|[ab])*z^((a)c|[ab])*z^((a)|b)*?cz^(([ab])|c)*?dabcdz^((d)|[ab])*?cz^((a)c|[ab])*?c)r   r\   r4   )re   ry   r\   )r   r\   N)r   r\   N)re   r\   r4   )r  ry   r\   )re   r\   N)re   r\   N)r   r   r*   )r   r	   r	   r
   test_bug_7251068  s    zRegexTests.test_bug_725106c             C   s<   | j tjddd d  d | j tjddd d  d d S )Nz(a)(?:(?=(b)*)c)*Zabbr4   z(a)((?!(b)*))*)r4   r4   N)r4   r4   NN)r   r   r*   )r   r	   r	   r
   test_bug_725149J  s    zRegexTests.test_bug_725149c             C   s4   G dd dt }tj|d}| j|jdd  d S )Nc               @   s   e Zd ZdS )z.RegexTests.test_bug_764548.<locals>.my_unicodeN)r   r   r   r	   r	   r	   r
   
my_unicodeS  s    r  re   rX   )r-   r   r   r   r*   )r   r  r   r	   r	   r
   test_bug_764548Q  s    zRegexTests.test_bug_764548c             C   s,   t jdd}| jdd |D dddg d S )Nz:+z
a:b::c:::dc             S   s   g | ]}|d  qS )r   r	   )r{   itemr	   r	   r
   r|   Y  s    z,RegexTests.test_finditer.<locals>.<listcomp>rx   z::z:::)r   finditerr   )r   itr	   r	   r
   test_finditerW  s    zRegexTests.test_finditerc             C   s    t jdt jdkr| j  d S )NZ
bug_926075s
   bug_926075)r   r   r!   )r   r	   r	   r
   test_bug_926075[  s    zRegexTests.test_bug_926075c             C   s&   d}| j tj|jddddg d S )Nu   [.。．｡]za.b.cr4   r\   ry   )r   r   r   r~   )r   rF   r	   r	   r
   test_bug_931848_  s    zRegexTests.test_bug_931848c                sl   t jdd | jt j d | jt fdd t jdjd}| j|j	 j d | j|j	 d  d S )	Nz\sza br%   rq   c                  s   t  S )N)nextr	   )r  r	   r
   r1   g  s    z,RegexTests.test_bug_581080.<locals>.<lambda>)r%   rq   )r%   rq   )
r   r  r   r  r)   assertRaisesStopIterationr   r   r(   )r   r   r	   )r  r
   test_bug_581080d  s    zRegexTests.test_bug_581080c                sL   t jdd | jt j d | jt j d | jt fdd d S )	Nz.*Zasdfr   rt   c                  s   t  S )N)r  r	   )r  r	   r
   r1   q  s    z,RegexTests.test_bug_817234.<locals>.<lambda>)r   rt   )rt   rt   )r   r  r   r  r)   r  r  )r   r	   )r  r
   test_bug_817234m  s    zRegexTests.test_bug_817234c             C   s\   dd l }xNdD ]F}|j |}| jtjdj|d  | jtjdj|dd  f  qW d S )Nr   ZbBuhHiIlLfds   blar   r%   )arrayr   r   r   r*   )r   r  typecoder4   r	   r	   r
   test_empty_arrays  s
    

zRegexTests.test_empty_arrayc             C   s\  t d}t d}tj|tjtjB }| jt|j|d tj|tjtjB }| jt|j|d tjd| tj}| jt|j|d tjd| tj}| jt|j|d tjd| }| jt|j|d tjd| }| jt|j|d | jttjddd | jttjddd | jttjd	dd | jtjd
dd  d S )Ni  i  Tz(?i)z(?iu)z(?i)ar=   za(?i)z(?iV1)aza(?iV1))rA   r   r   rE   r   r   r   r*   )r   Z
upper_charZ
lower_charr   r	   r	   r
   test_inline_flags{  s$    zRegexTests.test_inline_flagsc             C   s   t jd}| j|jddd | j|jddd | j|jddd t jdt j}| j|jddd	 | j|jddd
 | j|jddd d S )N$#za
b
za
b#
#za
b
cza
b
c#r2   z#
#za#
b#
#za#
b#
c#)r   r   r   r@   r   )r   rF   r	   r	   r
   test_dollar_matches_twice  s    
z$RegexTests.test_dollar_matches_twicec                sP  t jdt jd | jt| jfdd | jt| j fdd | jt| jfdd | jt| jfdd | jt| jfdd | jt| j fd	d | jt| j fd
d | jt| j fdd | jt| j	dd  | jt| j	dd  | jt| j
dd  | jt| j
dd  | jt| j
dd  | jt| j
dd  d S )Nr/      .c                  s
    j dS )N   b)r*   r	   )r   r	   r
   r1     s    z2RegexTests.test_bytes_str_mixing.<locals>.<lambda>c                  s
    j dS )Nr\   )r*   r	   )bpatr	   r
   r1     s    c                  s    j ddS )Nr'  ry   )r@   r	   )r   r	   r
   r1     s    c                  s    j ddS )Nr\      c)r@   r	   )r   r	   r
   r1     s    c                  s    j ddS )Nr'  r)  )r@   r	   )r   r	   r
   r1     s    c                  s    j ddS )Nr'  ry   )r@   r	   )r(  r	   r
   r1     s    c                  s    j ddS )Nr\   r)  )r@   r	   )r(  r	   r
   r1     s    c                  s    j ddS )Nr\   ry   )r@   r	   )r(  r	   r
   r1     s    c               S   s   t jdt jS )Ns   \w)r   r   r   r	   r	   r	   r
   r1     s    c               S   s
   t jdS )Ns   (?u)\w)r   r   r	   r	   r	   r
   r1     s    c               S   s   t jdt jt jB S )Nz\w)r   r   r   ASCIIr	   r	   r	   r
   r1     s    c               S   s   t jdt jS )Nz(?u)\w)r   r   r*  r	   r	   r	   r
   r1     s    c               S   s   t jdt jS )Nz(?a)\w)r   r   r   r	   r	   r	   r
   r1     s    c               S   s
   t jdS )Nz(?au)\w)r   r   r	   r	   r	   r
   r1     s    )r   r   rG   	TypeErrorSTR_PAT_ON_BYTESBYTES_PAT_ON_STRSTR_PAT_BYTES_TEMPLBYTES_PAT_STR_TEMPLrH   BYTES_PAT_UNI_FLAGMIXED_FLAGS)r   r	   )r(  r   r
   test_bytes_str_mixing  s     

z RegexTests.test_bytes_str_mixingc             C   sL  x\dt jfD ]N}t jd|t jB }| jt|jdd t jd|}| jt|jdd qW t jdt jt jB }| j|jdd  t jdt j}| j|jdd  t jdt j}| j|jdd  t jd}| j|jdd  xRdt jfD ]D}t jd|t jB }| j|jd	d  t jd
}| j|jd	d  qW | jt	| j
dd  d S )Nr      À   àTz\wu   (?a)Àz(?a)\w      s   \wc               S   s
   t jdS )Nz(?au)\w)r   r   r	   r	   r	   r
   r1     s    z8RegexTests.test_ascii_and_unicode_flag.<locals>.<lambda>)r   r   r   r   r   r   r*   r*  rG   rH   r1  )r   r   r   r	   r	   r
   test_ascii_and_unicode_flag  s&    

z&RegexTests.test_ascii_and_unicode_flagc             C   s   t jdd}|s| jd n4| sF|d |jdksF|d |jdkrP| jd |s`| jd n,|d d  d	kr| jdjt|d d   d S )
Nz(?<a>\w)xyz(Failed: expected match but returned Noner   r%   Failedr   z0Failed: expected "('x', 'x')" but got {} instead)r   r   )r   r*   r!   rf   formatascii)r   r0   r	   r	   r
   test_subscripting_match  s    *
z"RegexTests.test_subscripting_matchc             C   sF   t jdd}t jdd}|o6|o6|d d  |d d  ksB| jd d S )Nz	(?P<a>\w)r   z(?<a>\w)r9  )r   r*   r!   )r   Zm0m1r	   r	   r
   test_new_named_groups  s     z RegexTests.test_new_named_groupsc       	   0   C   s  | j tjddd  | j tjddd  | j tjddd  | j ttjddd | j ttjdd	d | j ttjd
dd | j ttjddd | j tjddd  | j tjd
dd  | j tjddd  | j tjdd	d  | j tjddd  | j tjddd  | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjd dd | j ttjd!dd | j ttjd"dd | j ttjd#dd | j ttjd$dd | j ttjd%dd | j ttjd&dd | j ttjd'dd | j ttjd(dd | j ttjd)dd | j ttjd*dd | j ttjd+dd | j ttjd,dd | j ttjd-dd | j ttjd.d/d | j ttjd0d1d | j ttjddd | j tjd.d2d  | j tjd0d2d  | j tjdd2d  | j tjd3d/d  | j tjd4d1d  | j tjd5dd  | j ttjd3d2d | j ttjd4d2d | j ttjd5d2d | j ttjd6dd | j ttjd6d7d | j ttjd8dd | j ttjd9d7d | j ttjd:d7d | j ttjd:dd | j ttjdd/d | j ttjdd7d | j ttjdd;d | j tjd<dj d | j tjd<d?j d | j tjd<dAd7dd?dBdCdDg | j tjdEdAdFdGg | j tjd<dHdIdJdKdLg | j ttjd9d7d dM}dN}tdOj }d|dPfdQ|dPfd5|dRfdS|dRfd.|dTfdU|dTfd3|dVfdW|dVfdX|dYfdZ|d[fd\|d]fd^|d_fd`|dafdb|dcfddddd|djfdk|djfd|dlfdm|dlfd|dnfdo|dnfd|dpfdq|dpfdr|dsfdt|dufdv|dwfdx|dyfdz|d{fd||d}fd|djfd~|djfd|dlfd|dlfd|dnfd|dnfd|dpfd|dpfd|dsfd|dufd|dwfd|dyfd|d{fd|d}fg.}x|D ]|\}}}y4|d d= jtj|||kr| j	dj
| W n: tk
r6 } z| j	dj
|t| W Y d d }~X nX qW | j ttjdd/d | j ttjddd | j ttjddd d S )Ns   (?ai)r6  s	   (?ai)\xC0s   (?a)\wz\wr4  Ts   (?L)\d   0s   (?L)\s    s   (?L)\w   a   ?s   (?L)\Ds   (?L)\Ss   (?L)\Wz\p{Cyrillic}u   Аz(?i)\p{Cyrillic}z\p{IsCyrillic}z\p{Script=Cyrillic}z\p{InCyrillic}z\p{Block=Cyrillic}z[[:Cyrillic:]]z[[:IsCyrillic:]]z[[:Script=Cyrillic:]]z[[:InCyrillic:]]z[[:Block=Cyrillic:]]z\P{Cyrillic}r=   z\P{IsCyrillic}z\P{Script=Cyrillic}z\P{InCyrillic}z\P{Block=Cyrillic}z\p{^Cyrillic}z\p{^IsCyrillic}z\p{^Script=Cyrillic}z\p{^InCyrillic}z\p{^Block=Cyrillic}z[[:^Cyrillic:]]z[[:^IsCyrillic:]]z[[:^Script=Cyrillic:]]z[[:^InCyrillic:]]z[[:^Block=Cyrillic:]]z\dr   z\sr}   r	  z\Dz\Sz\Wz\p{L}r4   z\p{Lu}z\p{Ll}z(?i)ar   z\Xr   r%   u   àrq   u   aààeéée   éu   éz\X{3}u   aààu   eééu   
́Áz
u   ́u   Áu   -09AZaz_Γγs   -09AZaz_z#Ll Lm Lo Lt Lu Mc Me Mn Nd Nl No Pcu   09AZaz_Γγz
[[:word:]]r`   z[[:^word:]]Z09z[[:digit:]]u
   -AZaz_Γγz[[:^digit:]]z[[:alpha:]]u   AZazΓγz[[:^alpha:]]z-09_z[[:alnum:]]u
   09AZazΓγz[[:^alnum:]]z-_z[[:xdigit:]]Z09Aaz[[:^xdigit:]]u   -Zz_Γγ\p{InBasicLatin}   aá\P{InBasicLatin}   á(?i)\p{InBasicLatin}(?i)\P{InBasicLatin}s   09AZaz_s   (?L)[[:word:]]   -s   (?L)[[:^word:]]s   09s   (?L)[[:digit:]]s   -AZaz_s   (?L)[[:^digit:]]s   (?L)[[:alpha:]]s   AZazs   (?L)[[:^alpha:]]s   -09_s   (?L)[[:alnum:]]s   09AZazs   (?L)[[:^alnum:]]s   -_s   (?L)[[:xdigit:]]s   09Aas   (?L)[[:^xdigit:]]s   -Zz_s   (?a)[[:word:]]s   (?a)\Ws   (?a)[[:^word:]]s   (?a)\ds   (?a)[[:digit:]]s   (?a)\Ds   (?a)[[:^digit:]]s   (?a)[[:alpha:]]s   (?a)[[:^alpha:]]s   (?a)[[:alnum:]]s   (?a)[[:^alnum:]]s   (?a)[[:xdigit:]]s   (?a)[[:^xdigit:]]z
Failed: {}zFailed: {} raised {}z\p{NumericValue=0}z\p{NumericValue=1/2}   ½z\p{NumericValue=0.5})r   r%   )r   rq   )rF  rG  r4   )rH  rG  rI  )rJ  rG  r4   )rK  rG  rI  )r   r   r*   r   r)   r    setr~   r   r!   r:  	Exceptionr;  )	r   Zchars_uZchars_bZword_settestsrF   charsexpectedrC  r	   r	   r
   test_properties  s@   


 .zRegexTests.test_propertiesc          
   C   sp   | j tjdddg | j tjddddg | j tjdddddg | j tjddd	d
dddddd	g d S )Nz\w+u    हिन्दी,u   हिन्दीz\W+r}   ,z(?V1)\bz(?V1)\Brh   u    हu   िu   नu   ्u   दu   ी,)r   r   r    r~   )r   r	   r	   r
   test_word_class  s    




zRegexTests.test_word_classc             C   s   | j tjddddg d S )Nz\G\w{2}zabcd efr   r   )r   r   r    )r   r	   r	   r
   test_search_anchor  s    zRegexTests.test_search_anchorc             C   s  | j tjdddddg | j tjdddddddg | j tjdd	d
dg | j tjdd	ddd
dddg | j tjdddddVdWg | j dd tjddD dddg | j dd tjdd	ddD d
dddg | j dd tjddD dddg | j dd tjdd	ddD d
dddg | j tjdddddg | j tjdddddg | j tjdddddg | j tjdddddg | j dd tjddD dddg | j dd tjddD dddg | j d d tjddD dddg | j d!d tjddD dddg | j tjd"d#ddg | j tjd$d%ddg | j tjd&d#g  | j tjd'd#d(g | j tjd)d*d+dddg | j tjd,d*d+dddg | j tjd-d*ddd+dg | j tjd.d*ddd+dg | j tjd/d%d0d1d2ddg | j tjd/d%d0dXd2ddg | j d3d tjd/d%d0d1d2D ddg | j d4d tjd/d%d0dYd2D ddg | j d5d tjdd%d0d1d2D ddg | j d6d tjdd%d0dZd2D ddg | j tjdd%d0d1d2ddg | j tjdd%d0d[d2ddg | j tjd7d8tjdd9g | j tjd:d8tjd9dg | j tjd;ddg | j tjd;dddddg | j tjd<d=d\d]g | j tjdBd=d^d_g | j dDd tjd;dD dg | j dEd tjd;dddD ddg | j dFd tjd<d=D dGdHg | j dId tjdBd=D dJdKg | j tjdLdLj d` | j tjdOdLj da | j tjdPdQj db | j tjdRdQj dc | j tjdSdTdd | j tjdUdTdd d S )dNz(?r).re   ry   r\   r4   T)
overlappedz(?r)..abcder   r   r   r   z(?r)(.)(-)(.)za-b-cr`   c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    z2RegexTests.test_search_reverse.<locals>.<listcomp>c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    z^|\w+zfoo barrh   r  r  z
(?V1)^|\w+z	(?r)^|\w+z(?rV1)^|\w+c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    z\G\w{2}zabcd efz.{2}(?<=\G.*)r  z(?r)\G\w{2}z(?r)\w{2}\Gefzq*ZqqweZqqz(?V1)q*z(?r)q*z(?rV1)q*r/   r%   r&   )r   r   c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    z[ab]ZaBBz(?r)[ab]z(?r).{2}z(\w+) (\w+)zfirst second third fourth fifthr   r   thirdfourthz(?r)(\w+) (\w+)fifthc             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|   
  s    c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    zfirst secondzthird fourthc             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    zfourth fifthzsecond thirdr   r   r   z
(?r)abcdefz
(?i)abcdefABCDEFz(?ir)abcdefz(.)z\1z(?r)(.))r\   r`   ry   )r4   r`   r\   r   r   r   r   )r   r   )r[  r\  )r\  r]  )r   r[  )r   r   )r   r   )r   r   )r   r   )r   r   r    r  rE   r(   r)   r@   )r   r	   r	   r
   test_search_reverse  s    









zRegexTests.test_search_reversec             C   s   | j tjddd  d S )Nz(?>a*)ar   )r   r   r(   )r   r	   r	   r
   test_atomic  s    zRegexTests.test_atomicc             C   sd  | j tjddj d | j tjddj d | j tjddj d | j tjd	dj d | j tjd
dj d | j tjddj d | j tjddj d  | j tjddj d! | j tjddd  | j tjddd  | j tjddd  | j tjddd  | j tjddd  | j tjddd  | j tjddd  | j tjddd  d S )"Nza?ar4   r   r%   za*ar'   r&   za+aza{1,3}az	(?:ab)?abr   rq   z	(?:ab)*abZabababr   z	(?:ab)+abz(?:ab){1,3}abza?+aza*+aza++aza{1,3}+az
(?:ab)?+abz
(?:ab)*+abz
(?:ab)++abz(?:ab){1,3}+ab)r   r%   )r   r&   )r   r&   )r   r&   )r   rq   )r   r   )r   r   )r   r   )r   r   r(   r)   )r   r	   r	   r
   test_possessive  s"    zRegexTests.test_possessivec          
   C   s*  t jd#kr*| jtjdddddd	dg n| jtjdddg | jtjd
ddddd	dg | jtjdddddg | jdd tjddD dddg | jtjdddddg | jdd tjddD dddg | jtjdddddg | jdd tjddD dddg | jtjdddddg | jdd tjddD dddg t jd$kr| jtjddddddd	dddg | jdd tjddD ddddd	dddg n6| jtjdddg | jdd tjddD dg t jd%krL| jtjdddddd	ddddg | jdd tjddD dddd	ddddg n6| jtjdddg | jdd tjddD dg | jtjddddddd	dddg | jd d tjddD ddddd	dddg | jtjd!ddddd	ddddg | jd"d tjd!dD dddd	ddddg d S )&Nr&   r:   r   z\bza brh   r4   r}   r\   z(?V1)\bz^|\w+zfoo barr  r  c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|   F  s    z-RegexTests.test_zerowidth.<locals>.<listcomp>z	(?r)^|\w+c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|   J  s    z
(?V1)^|\w+c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|   N  s    z(?rV1)^|\w+c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|   R  s    rz   r   ry   c             S   s   g | ]}|qS r	   r	   )r{   r0   r	   r	   r
   r|   X  s    c             S   s   g | ]}|qS r	   r	   )r{   r0   r	   r	   r
   r|   \  s    z(?r)c             S   s   g | ]}|qS r	   r	   )r{   r0   r	   r	   r
   r|   b  s    c             S   s   g | ]}|qS r	   r	   )r{   r0   r	   r	   r
   r|   f  s    z(?V1)c             S   s   g | ]}|qS r	   r	   )r{   r0   r	   r	   r
   r|   k  s    z(?rV1)c             S   s   g | ]}|qS r	   r	   )r{   r0   r	   r	   r
   r|   p  s    )r&   r:   r   )r&   r:   r   )r&   r:   r   )ra   rb   r   r   r~   r    r  r   )r   r	   r	   r
   test_zerowidth9  s\    



zRegexTests.test_zerowidthc             C   s   | j tjddj d | j tjddj d | j tjddj d | j tjddd  | jtj| jdd	  | j tjd
dd  | j tjddd  | j tjddtjdd  | j tjddtjdd  | j tjddtjdj d d S )Nz(?i)Abr   r   rq   z(?i:A)bzA(?i)bzA(?iV1)bc               S   s   t jddt jdS )Nz	(?V0-i)Abr   )r   )r   r(   rE   r	   r	   r	   r
   r1   z  s    z9RegexTests.test_scoped_and_inline_flags.<locals>.<lambda>z(?V0)Abz(?V1)Abz	(?V1-i)Ab)r   z(?-i:A)bz	A(?V1-i)b)r   rq   )r   rq   )r   rq   )r   rq   )r   r   r(   r)   rG   rY   CANT_TURN_OFFrE   )r   r	   r	   r
   test_scoped_and_inline_flagss  s    z'RegexTests.test_scoped_and_inline_flagsc             C   sL   | j tjddj d	 | j tjddj d
 | j tjddj d d S )Nz(?:a+)+r'   r   r&   z(?:(?:ab)+c)+abcabcr   z
(?:a+){2,})r   r&   )r   r   )r   r&   )r   r   r(   r)   )r   r	   r	   r
   test_repeated_repeats  s    z RegexTests.test_repeated_repeatsc             C   sD  | j tjddj d | j tjddd  | j tjddd  | j tjddj d | j ttjddd	 | j tjd
dd  | j ttjddd	 | j tjddd  | j tjddd  | j tjddd  | j ttjddd	 | j tjddd  | j ttjddd	 | j ttjddd	 | j tjddd  | j ttjddd	 | j tjddd  | j ttjddd	 | j tjddd  | j tjddd  | j tjddd  | j ttjddd	 | j ttjddd	 | j tjddd  | j ttjddd	 | j tttjd| j	 d S ) Nz123(?<=a\d+)Za123r%   rt   Zb123z123(?<!a\d+)z(a)b(?<=b)(c)re   Tz(a)b(?<=c)(c)z(a)b(?=c)(c)z(a)b(?=b)(c)z(?:(a)|(x))b(?<=(?(2)x|c))cz(?:(a)|(x))b(?<=(?(2)b|x))cz(?:(a)|(x))b(?<=(?(2)x|b))cz(?:(a)|(x))b(?<=(?(1)c|x))cz(?:(a)|(x))b(?<=(?(1)b|x))cz(?:(a)|(x))b(?=(?(2)x|c))cz(?:(a)|(x))b(?=(?(2)c|x))cz(?:(a)|(x))b(?=(?(1)b|x))cz(?:(a)|(x))b(?=(?(1)c|x))cz(a)b(?<=(?(2)x|c))(c)z(a)b(?<=(?(2)b|x))(c)z(a)b(?<=(?(1)c|x))(c)z(a)b(?<=(?(1)b|x))(c)z(a)b(?=(?(2)x|c))(c)z(a)b(?=(?(2)b|x))(c)z(a)b(?=(?(1)c|x))(c)z(a)\2(b))r%   rt   )r%   rt   )
r   r   r(   r)   r   r*   rK   r   r   rL   )r   r	   r	   r
   test_lookbehind  sP    zRegexTests.test_lookbehindc             C   s   t jdkr"| jtjdddd n| jtjdddd | jtjd	ddd t jdkrp| jtjddd
d n| jtjddd
d | jtjd	dd
d t jdkr| jtjdddd n| jtjdddd | jtjd	ddd d S )Nr&   r:   r   z(?V0)(x)?(y)?z\2-\1r8  zy-x-zy-xz(?V1)(x)?(y)?r   z-x-z-xr   zy--zy-)r&   r:   r   )r&   r:   r   )r&   r:   r   )ra   rb   r   r   r@   )r   r	   r	   r
   test_unmatched_in_sub  s    


z RegexTests.test_unmatched_in_subc             C   s   t jd}tjdkr.| j|jdd dd n| j|jd
d dd | jdd |jdD ddg t jd}| j|jdd dd | jdd |jdD ddg d S )NzD(?mV0)(?P<trailing_ws>[ \t]+\r*$)|(?P<no_final_newline>(?<=[^\n])\Z)r&   r:   r   c             S   s   d| j  d S )N<>)r   )r0   r	   r	   r
   r1     s    z+RegexTests.test_bug_10328.<locals>.<lambda>zfoobar %foobar<trailing_ws><no_final_newline>rq   c             S   s   d| j  d S )Nri  rj  )r   )r0   r	   r	   r
   r1     s    foobar<trailing_ws>r%   c             S   s   g | ]}|j  qS r	   )rf   )r{   r0   r	   r	   r
   r|     s    z-RegexTests.test_bug_10328.<locals>.<listcomp>r}   rh   zD(?mV1)(?P<trailing_ws>[ \t]+\r*$)|(?P<no_final_newline>(?<=[^\n])\Z)c             S   s   d| j  d S )Nri  rj  )r   )r0   r	   r	   r
   r1     s    c             S   s   g | ]}|j  qS r	   )rf   )r{   r0   r	   r	   r
   r|     s    )r&   r:   r   )rk  rq   )rl  r%   )rk  rq   )r   r   ra   rb   r   rv   r  )r   r   r	   r	   r
   test_bug_10328  s    




zRegexTests.test_bug_10328c             C   st  | j tjddddg | j tjddddddddg | j tjd	dddg | j tjd	dddddddg | j tjd
dddddg | j dd tjddD ddg | j dd tjddddD ddddg | j dd tjd	dD ddg | j dd tjd	dddD ddddg | j dd tjd
dddD ddg | j dd tjddddD ddg d S )Nz..rX  r   r   T)rW  r   r   z(?r)..z	(.)(-)(.)za-b-cr4   r`   r\   ry   c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    z.RegexTests.test_overlapped.<locals>.<listcomp>c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    c             S   s   g | ]}|d  qS )r   r	   )r{   r0   r	   r	   r
   r|     s    c             S   s   g | ]}|j  qS r	   )r   )r{   r0   r	   r	   r
   r|     s    c             S   s   g | ]}|j  qS r	   )r   )r{   r0   r	   r	   r
   r|     s    z(?r)(.)(-)(.))r4   r`   r\   )r\   r`   ry   )r4   r`   r\   )r\   r`   ry   )r\   r`   ry   )r4   r`   r\   )r   r   r    r  )r   r	   r	   r
   test_overlapped  s(    

zRegexTests.test_overlappedc             C   sJ   | j tjdddddddg | j dd tjddD dddddg d S )	NrT  za,b,,c,r4   r\   rh   ry   c             S   s   g | ]}|qS r	   r	   )r{   r0   r	   r	   r
   r|     s    z-RegexTests.test_splititer.<locals>.<listcomp>)r   r   r~   r   )r   r	   r	   r
   test_splititer  s    zRegexTests.test_splititerc             C   s   | j tjddj d | j tjddj d | j tjdddddd	d
dg | j tjddddg | j tjddddddg d S )Nz\Xr4  r   r%   u   àrq   u   aààeéér4   rC  rD  u   éz\X{3}u   aààu   eééu   
́ÁrE  z
u   ́u   Á)r   r%   )r   rq   )r   r   r*   r)   r    )r   r	   r	   r
   test_grapheme   s    


zRegexTests.test_graphemec             C   s$  d}| j tjd|ddddddd	d
dddddddddddddddg | j tjd|dddddddddddd
dddddddddddddg d}| j tjd|dddd
dg | j tjd|dddd
dg d}| j tjd|dddddd dd!dd"dd#dg | j tjd|dddd$dd%dg d S )&Nz4The quick ("brown") fox can't jump 32.3 feet, right?z(?V1)\brh   ZTher}   Zquickz ("Zbrownz") ZfoxZcan'tZjumpZ32r/   3Zfeetz, rightr	  z(?V1w)\br   ")zcan'tz32.3rT  zThe  foxz  zcan't aujourd'hui l'objectifZaujourdZhuilZobjectifzaujourd'huiz
l'objectif)r   r   r~   )r   textr	   r	   r
   test_word_boundary  s(    


zRegexTests.test_word_boundaryc             C   s  | j tjddddg | j tjdddg | j tjddddg | j tjd	dddg | j tjd	dddg | j tjd	dddg | j tjd
dj d | j tjd
dd  | j tjd
dd  | j tjddj d | j tjddd  | j tjddd  | j tjddj d | j tjddj d | j tjddd  | j tjddj d | j tjddj d | j tjddj d | j tjddj d | j tjddj d | j tjddd  | j tjddj d | j tjddj d | j tjddj d | j tjddj d | j tjddj d | j tjddd  | j tjddj d | j tjddj d | j tjddj d d S )Nz.+zLine 1
Line 2
zLine 1zLine 2zLine 1Line 2zLine 1
Line 2
zLine 1zLine 2z(?w).+z^abcre   r   z
abczabcz(?w)^abczabc$zabc
zabcz(?w)abc$z(?m)^abcr%   z	(?mw)^abcz(?m)abc$z	(?mw)abc$)r   r   r    r(   r   )r   r	   r	   r
   test_line_boundary$  sH    



zRegexTests.test_line_boundaryc             C   s@  | j tjddj d | j tjddj d | j tjddj d | j tjddj d | j tjdd	j d | j tjddj d | j tjdd	j d | j tjddj d | j tjdd	j d  | j tjddj d! | j tjddj d" | j tjddj d# | j tjddj d$ | j tjddj d% | j tjddj d& | j tjddj d' | j tjddj d( | j tjddj d) | j tjddj d* | j tjddj d+ | j tjddj dgdgd | j tjddj d, | j tjddj dd
gg d d S )-Nz(?:(a)|(b))(c)r   r4   ry   r   r\   z(?:(?<a>a)|(?<b>b))(?<c>c)z!(?<a>a)(?:(?<b>b)|(?<c>c))(?<d>d)r   r   Zacdz(a)(?:(b)|(c))(d)z(a)(?|(b)|(b))(d)z(?|(?<a>a)|(?<b>b))(c)z(?|(?<a>a)|(?<a>b))(c)z$(?|(?<a>a)(?<b>b)|(?<b>c)(?<a>d))(e)ZaberC  r   z (?|(?<a>a)(?<b>b)|(?<b>c)(d))(e)z(?|(?<a>a)(?<b>b)|(c)(d))(e)z (?|(?<a>a)(?<b>b)|(c)(?<a>d))(e))r4   r\   )r4   Nry   )Nr\   ry   )r4   Nry   )Nr\   ry   )r4   r\   Nr   )r4   Nry   r   )r4   r\   Nr   )r4   Nry   r   )r4   r\   r   )r4   Nry   )Nr\   ry   )r4   ry   )r\   ry   )r4   r\   rC  )r   ry   rC  )r4   r\   rC  )r   ry   rC  )r4   r\   rC  )ry   r   rC  )r4   r\   rC  )r   NrC  )r   r   r*   r   capturesdict)r   r	   r	   r
   test_branch_resetN  s\    













zRegexTests.test_branch_resetc             C   s  | j tjddj dQ | j tjddj dR | j tjddj dS | j tjddj dT | j tjd	d
dd | j tjdddg | j tjdddg | j tjddddg | j tjddddg | j tjddddg | j tjddddg | j tjdddddg | j tjdddddg | j tjdddg | j tjdddg | j tjdddg | j tjdddg | j d jtjd!d"d# | j d jtjd$d"d% | j d jtjd&d'd( | j d jtjd)d*d+ | j d jtjd,d*d+ | j d jtjd-d.d* d jd/d0 td1D }| j ttjd2|d3 | j ttjd4|d5 | j ttjd6|d7 | j ttjd8|d9 | j ttjd:|d9 | j ttjd;|d7 | j ttjd<|d= | j ttjd>|d? | j ttjd@|dA | j ttjdB|dC | j ttjdD|dC | j ttjdE|dF | j ttjdG|dH | j ttjdI|dH | j t	t
tjdJ| j | j tjdKdLddMg | j tjdNdLddMg | j tjdOdLddMg | j tjdPdLddMg d S )UNz[a]r4   r   r%   z(?i)[a]r=   z[a-b]z	(?i)[a-b]z(?V0)([][])r`   za[b]cza-b-cz[\p{Alpha}]Za0z(?i)[\p{Alpha}]ZA0z[a\p{Alpha}]Zab0r\   z[a\P{Alpha}]r   z(?i)[a\p{Alpha}]z(?i)[a\P{Alpha}]z[a-b\p{Alpha}]ZabC0Cz(?i)[a-b\p{Alpha}]ZAbC0z[\P{Alpha}]z[^\p{Alpha}]z[^\P{Alpha}]rh   z[^\d-h]za^b12c-hza^bcz[^\dh]za^bc-z	[^h\s\db]z	a^b 12c-hza^c-z[^b\w]za br}   z[^b\S]z[^8\d]za 1b2c             s   s   | ]}t |V  qd S )N)rA   )r{   ry   r	   r	   r
   	<genexpr>  s    z&RegexTests.test_set.<locals>.<genexpr>r   z	\p{ASCII}r   z
\p{Letter}u   z	\p{Digit}r6   z(?V1)[\p{ASCII}&&\p{Letter}]4   z'(?V1)[\p{ASCII}&&\p{Alnum}&&\p{Letter}]z&(?V1)[\p{ASCII}&&\p{Alnum}&&\p{Digit}]z(?V1)[\p{ASCII}&&\p{Cc}]!   z(?V1)[\p{ASCII}&&\p{Graph}]^   z(?V1)[\p{ASCII}--\p{Cc}]_   z[\p{Letter}\p{Digit}]r   z(?V1)[\p{Letter}||\p{Digit}]z\p{HexDigit}   z(?V1)[\p{HexDigit}~~\p{Digit}]r9   z(?V1)[\p{Digit}~~\p{HexDigit}]z(?V0)([][-])z(?V1)[[a-z]--[aei]]re   ry   z(?iV1)[[a-z]--[aei]]z(?V1)[\w--a]z(?iV1)[\w--a])r   r%   )r   r%   )r   r%   )r   r%   )r   r   r*   r)   r@   r    r   r   lenrK   r   r   rL   )r   	all_charsr	   r	   r
   test_set  s    

zRegexTests.test_setc            C   s$$  dddt j| jfdddt j| jfdddt j| jfdddt j| jfdddt j| jfddd	td
fdddt j| jfdddt j| jfdddt j| jfdddt j| jfdd
d	td
fddd	td
fdddtd fddd	td
fdddtd fdddt j| jfdd
d	td
fddd	td
fdd
dt j| jfdUdtdd dttdd fdd
dtd
fd d!d"tdVfd$d%dtd%fd&d%dtd%fd'd%dtd%fd(d%dtd fd)d*dtd*fd+d*dtd*fd,d-dttd.fd/d-dtd fd0d1dtd fd2d3dtd fd4d-dtd fd5d6dtd6fd7d6dtd6fd8d9dttd:td; td< td= td> td? fd@dAdtdAfdBdCdtdDfdEdFdtdFfdEdGdtd fdHdIdtd fdJdIdtd fdEdKdtdKfdLdGdtdGfdMdGdtd fdNdGdtdGfdOdIdtdIfdPdIdtd fdQdIdtdIfdRdIdtdIfdSddt j| j	fdWdUdUdtdUfdUdVdtd fdUdWdtd fdUdXdtd fdUdYdtdUfdUdZdtdUfd[dUdtdUfd\dUdtdUfd\d]dtd]fd\d^dtd^fd_d]dtd]fd_dUdtd fd_d`dtd fd_d^dtd^fdad]dtd]fdadUdtdUfdad^dtd fdbdUdtdUfdcdUdtdUfdcdddtd fdedddtdUfdcdfdtd fdgdfdtdUfdhdUdtdfdidUdtdfdjdUdtdUfdjdWdtdWfdkdldtdlfdkdmdtd fdndUdtd fdndodtdofdpdodtd fdpdqdtdqfdrdsdtdtfdudvdtdvfdwdvdtdvfdxdvdtdvfdydzdt j| j
fd{dzdt j| j
fd|dzdt j| jfd}dzdt j| j	fd~dzdt j| jfdddtdfdddtdfdddtdfdddtdfddodtd fdddtdfdddtd fdddtd fdddtdfddvdtd
fdddtd
fdddtd
fdddtd fdddtd fdddtd fdddtd fdddtdfdddtdfdddtd fdddtd fddvdtd fdddtd fdddtd fdddtd fdddtd fdddtdfdddtdfdddtdfddUdtdfdddtdfdddtdXfdddtd fdddtdYfdddtdfdddtdfdddtdfddUdtdZfddUdtd[fdddtdUfdddtd\fdddtd]fdddtd^fddzdt j| j	fdddtdfdUddtd fdddtdfdddtdfdddtd_fdddtdfdddtdfdddtd
fdddtd`fdddtdăfdddtd fdddtdafdddtdbfddUdtdcfddUdtddfdddtdefdddtdffdddtdgfdddtd҃fdddtd fddUdtdhfdddtdifdddtd؃fdddtdjfdddtdkfdddtdlfdddtd fdddtd fdddtdmfdd
dtd
fdddtd fdddtdfdddtdnfdddtdofdddtd fddtdtdtfddd	tdUfddd	tdUfddd	tdfdddtdpfdddtd fdddtdqfdddtdrfdddtdsfdddtdtfdddtdufdddtdvfdddtdwfd ddtdxfdddtdyfdddtdzfdddtd{fdddtd|fdddtd}fdd	dtd~fd
ddtdfdddtdfdddtdfdddtdfdddtdfddUdtd fdddtdfddsdtdfdddt j| jfddd tdfd!dd tdfd"ddt j| jfd#d$dtd$fd%d$dt j| jfd&d'dtd'fd&d'dtdfd(ddtdfd)d
dtd
fd*d+dtd+fd,d
dtd
fd-d.dtd.fd/d+dtd+fdUdUdtdUfdUdVdtd fdUdWdtd fdUdXdtd fdUdYdtdUfdUdZdtdUfd[dUdtdUfd\dUdtdUfd\d]dtd]fd\d^dtd^fd0d^dtd^fd_d]dtd]fd_dUdtd fd_d`dtd fd1d`dtd fd_d^dtd^fd1d^dtd^fd2d^dtd^fd3d^dtd^fd4d^dtd fdad]dtd]fdadUdtdUfd5dUdtdUfdad^dtd fdbdUdtdUfd6dUdtdUfdcdUdtdUfdcdddtd fdedddtdUfdcdfdtd fdgdfdtdUfdhdUdtdfdidUdtdfdjdUdtdUfdjdWdtdWfdkdldtdlfdkdmdtd fdndUdtd fdndodtdofdpdodtd fdpdqdtdqfdrdsdtdtfdudvdtdvfdxdvdtdvfd7dzdt j| jfdydzdt j| j
fd{dzdt j| j
fdddtdfdddtdfdddtdfddodtd fdddtdfdddtd fdddtd fdddtdfddUdtdfdddtdfdddtdfd8dzdt j| jfd9dzdt j| jfdddtd fd|dzdt j| jfdddtdfdddtdfdddtdfdddtdfd}dzdt j| j	fd~dzdt j| jfddUdtdfddUdtdfdddtdUfd:ddtdUfd;dzdt j| jfd<ddtdUfdddtdfd=ddtdfdddtdfd>ddtdfdddtdfd?ddtdfddzdt j| j	fdddtdfdUddtd fdddtdfd@dAdtdfdBddtdfdddtdfdddtdfdddtdfdddtdfdddtd
fdddtdfdddtdăfdddtd fdddtdfdddtdfddUdtdfddUdtdfdddtdfdddtdfdddtdfdddtd҃fdddtd fddUdtdfdddtdfdddtd؃fdddtdfdddtdfdddtdfdddtd fdddtd fdddtdfdCd
dDtd
fdEddtdfdFddt j| jfdGddt j| jfdd
dtd
fdddtd fdddtdfdddtdfdddtdfdddtd fddtdtdtfddd	tdUfddd	tdUfdHdIdtdIfdHdJdtd fdHdKdtd fdHdLdtd fdHdMdtdIfdHdNdtdIfdOdIdtdIfdPdIdtdIfdPdQdtdQfdRdSdtdSfdTdSdtdSfdUdQdtdQfdVdIdtd fdVdWdtd fdXdWdtd fdVdSdtdSfdYdSdtdSfdZdSdtdSfd[dSdtdSfd\dSdtd fd]dQdtdQfd]dIdtdIfd^dIdtdIfd]dSdtd fd_dIdtdIfd`dIdtdIfdadIdtdIfdadbdtd fdcdbdtdIfdadddtd fdedddtdIfdfdIdtdfdgdIdtdfdhdIdtdIfdhdKdtdKfdidjdtdjfdkdldtd fdmdIdtd fdmdndtdnfdodndtd fdodpdtdpfdqdrdtdsfdtdudtdufdvdudtdufdwdzdt j| jfdxdzdt j| j
fdydzdt j| j
fdzd{dtd{fd|d}dtd}fd~ddtdfd~dndtd fdddtdfdddtd fdddtd fdddtdfddIdtdfdddtdfdddtdfddzdt j| jfddzdt j| jfdddtd fddzdt j| jfdddtdfdddtdfdddtdfdddtdfddzdt j| j	fddzdt j| jfddIdtdfddIdtdfdddtdIfdddtdIfddzdt j| jfdddtdIfdiddtdIfdddtdIfdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfddzdt j| j	fdddtdfdHddtd fdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtd fdddtdfdddtdfddIdtdfddIdtdfdĐddtdfdƐddtdfdǐddtdfdȐddtdɃfdʐddtd fdːdIdtdfd̐ddtdfd͐ddtd΃fdϐddtdfdҐddtdfdҐddtdfdҐddtd fdҐddtd fdҐddtdfdddDtdfdڐddtdۃfdddtdfddd	tdfdސdd	tdfdߐddtd fdddtdfdddtdfdddtdÃfdddtd fddsdtdsfddd	tdIfddd	tdIfdddtdfdddtdfdddtdfddqd	tdfddqd	tdfddqd	tdfddqdtdăfddd	tdfddd	tdfddd	tdfdd dt j| jfdddtdfdddtdfdddtd fdd dtd fdd dtd fdddtdfdddtdfdddtdfded	dtd fd
d	dtdUfdddtdUfdEdGdtd fdNdGdtdGfdddtdfdddtdfdddtdUfdddtdUfdddtdfdddtdŃfdddtdƃfdddtdǃfdddt j| jfd d!dtdofd"ddt j| jfd#d$dtd$fd%ddtdfd&d'dtd'fd(d'dtd fd)d'dtd'fd*d'dtd'fd+d'dtd'fd,d'dtd'fd-d.dtd/fd0d1dtd1fd2d3dtd3fd4d5dtd5fd4d6dtd6fd7d8d	tdfd9d:dtd:fd;d:dtd:fd<d:dtd:fd=d:dtd:fd>d?dtd?fd@dAdtd fdBdCdtd fdDd'dtd fdEddtdȃfdFdUdtdɃfdGdUdtdʃfdHdUdtd˃fdId
dtd
fdIdJdtdJfdKdJdtdJfg}xz|D ]p}d }y0t|dLk"r|\}}}}n|\}}}}}W nT tk
#r8   dMjdNdO |d dP D dQg }| jdRj| Y nX g }	|#rxJ|jdSD ]:}
y|	jt|
 W n  tk
#r   |	j|
 Y nX #qRW |d k	#r| j||dT | j||t j|| W d Q R X nNt j||}|$r|	#rt|j|	 }nt|d d  }nt|}| j|| "qW d S (  Nz(?P<foo_123rh   z(?P<1>a)z(?P<!>a)z(?P<foo!>a)z(?P<foo_123>a)(?P=foo_123r   z(?P<foo_123>a)(?P=1)rT   r4   z(?P<foo_123>a)(?P=0)z(?P<foo_123>a)(?P=-1)z(?P<foo_123>a)(?P=!)z(?P<foo_123>a)(?P=foo_124)z(?P<foo_123>a)z(?P<foo_123>a)(?P=foo_123)z(?<foo_123>a)\g<foo_123z(?<foo_123>a)\g<1>z(?<foo_123>a)\g<!>z(?<foo_123>a)\g<foo_124>z(?<foo_123>a)z(?<foo_123>a)\g<foo_123>z\1[\1]rO   r   '\x01'z\09r   rQ   z\141z((a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\119abcdefghijklk9z0,11kz\0rN   z[\0a]z[a\0]z[^a\0]z\a[\b]\f\n\r\t\vz
	z[\a][\b][\f][\n][\r][\t][\v]z\xffrd   r   z\x00ffffffffffffffz\x00fz\x00fe   þz\x00ffz\t\n\v\r\f\a\gz	
gz	
\gz\t\n\v\r\f\az	
r5   r6   r7   r8   r9   r:   z[\t][\n][\v][\r][\f][\b]z	
z^\w+=(\\[\000-\277]|[^\n\\])*z(SRC=eval.c g.c blah blah blah \\
	apes.cz SRC=eval.c g.c blah blah blah \\za.bZacbza
bza.*bzacc
ccbza.{4,5}bzabza.b(?s)z	a.b(?sV1)z(?s)a.bza.*(?s)bz
a.*(?sV1)bz(?s)a.*bz(?s)a.{4,5}brv  ''re   ZxbcZaxcZabxxabcyZababczab*czab*bcZabbcZabbbbczab+bcZabqzab?bczab?cz^abc$Zabccz^abcZaabczabc$^r#  za.cza.*cZaxyzcZaxyzdza[bc]dr   za[b-d]eZaceza[b-d]aacr   za[-b]za-za[\-b]za[b-]za[]br`   za[za\zabc)z(abcza]za[]]bza]bza[^bc]dZaedza[^-b]cZadcza-cza[^]b]cza]cz\ba\bz-az-a-z\by\br8  ZyzrX   zx\bzx\Br   z\Bzr   zz\Bz\Bxz\Ba\Bz\By\Bz\By\br   z\by\Bzab|cdr   r  z()efdefz0,1rY  z$br\   za\(ba(bza\(*bza((bza\\bza\bz((a))z0,1,2z(a)b(c)ry   za+b+cZaabbabcz(a+|b)*z(a+|b)+z(a+|b)?z)(z[^ab]*r   za*z	a|b|c|d|erC  z(a|b|c|d|e)fzabcd*efgZabcdefgzab*Z	xabyabbbzZxayabbbzz(ab|cd)erX  r   z[abhgefdc]ijZhijz	^(ab|cd)ez(abc|)efr   z(a|b)c*dbcdz
(ab|ab*)bcz
a([bc]*)c*r   za([bc]*)(c*d)r   za([bc]+)(c*d)za([bc]*)(c+d)za[bcd]*dcdcdeZadcdcdeza[bcd]+dcdcdez	(ab|a)b*cz((a)(b)c)(d)z1,2,3,4z[a-zA-Z_][a-zA-Z0-9_]*alphaz^a(bc+|b[eh])g|.h$Zabhbhz(bc+d$|ef*g.|h?i(j|k))effgzijjZeffgZbcddZreffgzz(((((((((a)))))))))zmultiple words of textzuh-uhzmultiple wordszmultiple words, yeahz	(.*)c(.*)r   z\((.*), (.*)\)z(a, b)z2,1z[k]za[-]?cz(abc)\1re  z
([a-c]*)\1z^(.+)?BABr=   z(a+).\1$r]   z	^(a+).\1$aaaaz
([a-c]+)\1z(a)\1z(a+)\1z(a+)+\1z(a).+\1r   z(a)ba*\1z
(aa|a)a\1$r'   z
(a|aa)a\1$z(a+)a\1$z
([abc]*)\1z
(a)(b)c|abz(a)+xaaaxz([ac])+xaacxz([^/]*/)*sub1/zd:msgs/tdir/sub1/trial/away.cppd:msgs/tdir/sub1/tdir/z([^.]*)\.([^:]*):[T ]+(.*)track1.title:TBlah blah blahz0,1,2,3track1titleBlah blah blahz	([^N]*N)+abNNxyzNxyzNZabNNxyzabNNNz	([abc]*)xabcxz	([xyz]*)xz	(a)+b|aacz(?P<i d>aaa)az(?P<id>aaa)az0,idz(?P<id>aa)(?P=id)z(?P<id>aa)(?P=xd)z\ggz\g<1>z(.)\g<1>ggz\Nz\N{LATIN SMALL LETTER A}z\pr   z\p{Ll}z\PPz\P{Lu}zab{0,}bczab{1,}bcz	ab{1,3}bcz	ab{3,4}bcz	ab{4,5}bcz	ab{0,1}bczab{0,1}cza[b-a]z*az(*)bza{1,}b{1,}cza**za.+?cz
(a+|b){0,}z
(a+|b){1,}z(a+|b){0,1}z	([abc])*dabbbcdz([abc])*bcdz((((((((((a))))))))))10z((((((((((a))))))))))\10z((((((((((a))))))))))\41z(?i)((((((((((a))))))))))\41z(?i)abcr   ZXBCZAXCZABXZXABCYZABABCz(?i)ab*cz	(?i)ab*bcZABBCz
(?i)ab*?bcZABBBBCz(?i)ab{0,}?bcz
(?i)ab+?bcz	(?i)ab+bcZABQz(?i)ab{1,}bcz(?i)ab{1,}?bcz(?i)ab{1,3}?bcz(?i)ab{3,4}?bcz(?i)ab{4,5}?bcz
(?i)ab??bcz(?i)ab{0,1}?bcz	(?i)ab??cz(?i)ab{0,1}?cz	(?i)^abc$ZABCCz(?i)^abcZAABCz(?i)abc$z(?i)^z(?i)$z(?i)a.cz	(?i)a.*?cZAXYZCz(?i)a.*cZAXYZDz
(?i)a[bc]dZABDz(?i)a[b-d]eZACEz
(?i)a[b-d]ZAACZACz	(?i)a[-b]zA-z	(?i)a[b-]z
(?i)a[b-a]z(?i)a[]bz(?i)a[z(?i)a]zA]z	(?i)a[]]bzA]Bz(?i)a[^bc]dZAEDz(?i)a[^-b]cZADCzA-Cz(?i)a[^]b]czA]Cz	(?i)ab|cdABCDz(?i)()efZDEFEFz(?i)*az(?i)(*)bz(?i)$brZ  z(?i)a\z(?i)a\(bA(Bz	(?i)a\(*bzA((Bz(?i)a\\bzA\Bz(?i)abc)z(?i)(abcz	(?i)((a))z(?i)(a)b(c)r}  z	(?i)a+b+cZAABBABCz(?i)a{1,}b{1,}cz(?i)a**z	(?i)a.+?cZABCABCz(?i)a.{0,5}?cz(?i)(a+|b)*z(?i)(a+|b){0,}z(?i)(a+|b)+z(?i)(a+|b){1,}z(?i)(a+|b)?z(?i)(a+|b){0,1}z(?i)(a+|b){0,1}?z(?i))(z
(?i)[^ab]*CDEz(?i)a*z(?i)([abc])*dABBBCDz(?i)([abc])*bcdz(?i)a|b|c|d|eEz(?i)(a|b|c|d|e)fz(?i)abcd*efgZABCDEFGz(?i)ab*Z	XABYABBBZZXAYABBBZz(?i)(ab|cd)eABCDECDz(?i)[abhgefdc]ijZHIJz(?i)^(ab|cd)ez(?i)(abc|)efr^  z(?i)(a|b)c*dBCDz(?i)(ab|ab*)bcz(?i)a([bc]*)c*BCz(?i)a([bc]*)(c*d)Dz(?i)a([bc]+)(c*d)z(?i)a([bc]*)(c+d)z(?i)a[bcd]*dcdcdeZADCDCDEz(?i)a[bcd]+dcdcdez(?i)(ab|a)b*cz(?i)((a)(b)c)(d)z(?i)[a-zA-Z_][a-zA-Z0-9_]*ZALPHAz(?i)^a(bc+|b[eh])g|.h$ZABHBHz(?i)(bc+d$|ef*g.|h?i(j|k))EFFGZIJJZEFFGZBCDDZREFFGZz(?i)((((((((((a))))))))))z(?i)((((((((((a))))))))))\10ZAAz(?i)(((((((((a)))))))))z+(?i)(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))z/(?i)(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))z(?i)multiple words of textzUH-UHz(?i)multiple wordszMULTIPLE WORDS, YEAHzMULTIPLE WORDSz(?i)(.*)c(.*)DEz(?i)\((.*), (.*)\)z(A, B)z(?i)[k]z
(?i)a[-]?cz(?i)(abc)\1z(?i)([a-c]*)\1za(?!b).Zabadr   za(?=d).z	a(?=c|d).za(?:b|c|d)(.)za(?:b|c|d)*(.)za(?:b|c|d)+?(.)za(?:b|(c|e){1,2}?|d)+?(.)z1,2z(?<!-):(.*?)(?<!-):z
a:bc-:de:fzbc-:dez(?<!\\):(.*?)(?<!\\):z
a:bc\:de:fzbc\:dez(?<!\?)'(.*?)(?<!\?)'z
a'bc?'de'fzbc?'dezw(?# commentwz w(?# comment 1)xy(?# comment 2)zZwxyzzw(?i)Wzw(?iV1)z(?i)wz(?iV1)wz"(?x)w# comment 1
x y
# comment 2
zzjkl
abc
xyzz(?m)^abcz(?m)abc$zjkl
xyzabc
123z\w+z--ab_cd0123--Z	ab_cd0123z[\w]+z\D+Z1234abc5678z[\D]+z[\da-fA-F]+123abcz([\s]*)([\S]*)([\s]*)z testing!1972z3,2,1testing!1972r}   z(\s*)(\S*)(\s*)z(([a-z]+):)?([a-z]+)$smilz1,2,3z((.)\1+)z.*dzabc
abdr   z[\41]!z(x?)?z	 (?x)foo r  z (?V1x)foo z	(?x) foo z(?V1x) foo z(?x)foo z
(?V1x)foo z(?<!abc)(d.f)Z	abcdefdofZdofz[\w-]+Z
laser_beamz.*?\S *:zxx:za[ ]*?\ (\d+).*za   10za    10z(?ms).*?x\s*\Z(.*)zxx
x
z(?i)M+ZMMMz(?i)m+z(?i)[M]+z(?i)[m]+z"(?:\\"|[^"])*?"z"\""z^.*?$zone
two
three
za[^>]*?bza>bz^a*?$z^((a)c)?(ab)$z^([ab]*?)(?=(b)?)cz^([ab]*?)(?!(b))cz^([ab]*?)(?<!(a))cz\b.\b   Äz\wrt   z, c             S   s   g | ]}t |qS r	   )r;  )r{   fr	   r	   r
   r|   	  s    z+RegexTests.test_various.<locals>.<listcomp>r&   z...z%Incorrect number of test fields: ({})rT  )rF   r   )r  rO   r   r  )r  r  )rh   rh   r   r  )rY  rh   )r  )r4   r4   r4   )re   r4   ry   )r   r\   )r   r\   )r4   r4   )rY  rC  )r   r   )rY  rh   )r  r\   )re   r4   )re   r   )r  r   r   )r  r   r   )r  r\   r   )re   r   )re   r4   r\   r   )r  N)r  r  N)r  r  r  )r  r  N)rX  r   r   )r\   r4   )r]   r   )re  re   )re  re   )r   r4   )r   r4   )r   r4   )r   r4   )r   r4   )r'   r4   )r'   r4   )r'   r4   )re  re   )r   NN)r  r4   )r  ry   )r  r  )r  r  r  r  )r  r  )r  r  )r  re   )r   rh   )r  N)r  r'   )r  r   )r  r  )rY  rh   )r  )r4   r4   r4   )re   r4   ry   )r   r\   )r   r\   )r   r\   )r   r\   )r4   r4   )r4   r4   )r  ry   )r  r4   )rY  rC  )r   r   )rY  rh   )r  r\   )re   r4   )re   r   )r  r   r   )r  r   r   )r  r\   r   )re   r   )re   r4   r\   r   )r  N)r  r  N)r  r  r  )r  r  N)rX  r   r   )r\   r4   )r  rh   )r  )r=   r=   r=   )r   r=   r}  )r  rZ  )r  rZ  )r  rZ  )r  rZ  )r=   r=   )r=   r=   )rh   N)r  r}  )r  r=   )r  r  )r  r  )r  rh   )r  rZ  )r   r=   )r   r  )r  r  r  )r  r  r  )r  rZ  r  )r   r  )r   r=   rZ  r  )r  N)r  r  N)r  r  r  )r  r  N)r  r  r  )rZ  r=   )ry   rC  )rh   r  r}   )rh   r  r}   )NNr  )NNr   )r   N)r   N)r   N)r   rY   ri   rl   MISSING_RPARENr;  UNKNOWN_GROUPrZ   rA   TRAILING_CHARSr   
BAD_ESCAPEBAD_CHAR_RANGENOTHING_TO_REPEATMULTIPLE_REPEAT
OPEN_GROUPr  rH   r   r!   r:  r~   appendr,   ZsubTestrG   r(   rf   r   )r   rP  rr  ZexcvalrF   r   r   rR  fieldsZ
group_listrf   r0   r   r	   r	   r
   test_various  s   





2








,
zRegexTests.test_variousc             C   s|   | j tjdddd | j tjdddd | j tjdtjddd | j tjdddd | j tjdd	d
 dd d S )Nztest\?zresult\?\.
ztest?z(.)z\1\1r   r3   z\\1\\1c             S   s   dS )Nz\1\1r	   )r0   r	   r	   r
   r1   	  s    z-RegexTests.test_replacement.<locals>.<lambda>)r   r   r@   r   )r   r	   r	   r
   test_replacement	  s    zRegexTests.test_replacementc             C   sN   t jt j t j }|d }d| d | d }| jtttj|| j	 d S )Nrt   r   r   rv  )
r   ascii_lowercasedigitsascii_uppercaser   rK   r   r   r   rL   )r   allZsideregexpr	   r	   r
   test_common_prefix	  s    zRegexTests.test_common_prefixc             C   s*  | j tjddjddddg | j tjddjd	ddgdd
gf | j tjddjdddgdddgf | j tjddjddddddgdddddgf | j tjddjdddd gd!d"d#d$gd%gf | j tjd&d'jddg | j tjd(d)jdddg | j tjd*djddg d S )+Nz(\w)+re   r%   r4   r\   ry   z(\w{3})+r   r   r  z^(\d{1,3})(?:\.(\d{1,3})){3}$z192.168.0.1rq   Z192Z168r   rT   z^([0-9A-F]{2}){4} ([a-z]\d){5}$z3FB52A0C a2c4g3k9d3Z3FZB5Z2AZ0CZa2Zc4Zg3Zk9Zd3z([a-z]W)([a-z]X)+([a-z]Y)ZaWbXcXdXeXfYr&   ZaWZbXZcXZdXZeXZfYz.*?(?=(.)+)br   z.*?(?>(.){0,2})dr  z(.)+)r   r   r(   capturesr*   )r   r	   r	   r
   test_captures	  s"    




zRegexTests.test_capturesc             C   s   t jdd}| j|jdddd t jdd}| j|jdddd" t jdd}| j|jdddd( t jdd}| j|jddd+ t jdd}| j|j d, t jdd}| j|j d- d S ).Nz(X.*?Y\s*){3}(X\s*)+AB:zXY
X Y
X  Y
XY
XX AB:r   r%   rq   r&      r9      r      z(X.*?Y\s*){3,}(X\s*)+AB:z\d{4}(\s*\w)?\W*((?!\d)\w){2}Z9999XXr      zA\s*?.*?(\n+.*?\s*?){0,2}\(Xz
A
1
S
1 (Xr6   r   z	Derde\s*:zaaaaaa:
Derde:   zaaaaa:
Derde:r:   r8   r&   r  r9   r  r   r  )r  r  r  r   r  r9   r  r   r  )r  r  r  r   r   r   r   r   r   r  r   )r  r  r  r   r6   r  r   )r  r  )r   r  )r:   r8   )r   r(   r   r)   )r   r0   r	   r	   r
   test_guards	  s    zRegexTests.test_guardsc             C   s   d}t  }t  }xf|jdD ]X}|jd\}}|j||f |j||f |j||f |j||f |j||f qW x|D ]x}xr|D ]j}tjd| d |}|r||f|kr| jdjt|t| q||f|kr| jdjt|t| qW q~W d S )Nu   I=i;I=ı;i=İ;=z(?i)\Az\Zz{} matching {}z{} not matching {})	rN  r~   updateaddr   r*   r!   r:  r;  )r   pairsr  Zmatchingpairr   r   r0   r	   r	   r
   test_turkic	  s(    

zRegexTests.test_turkicc             C   s  dddg}| j tjdd|dj d | j tjdd|dj d | j tjdd	|dd  d
ddg}| j tjdd|dj d | j tjdd|dj d | j tjdd|dd  | j tttjddddgd| j | j tjddt	dddgdg  | j tjddt	dddgddg dg}| j tjdd|dj
 d/ dd!g}| j tjdd|dj
 d0 dg}| j tjdd|dj
 d1 d#g}| j tjd$d%|dj
 d2 | j tjd$d(|dj
 d3 | j tjd)d*j
 d4 | j tjd)d,j
 d5 | j tjd-d.g dj
 d6 d S )7NZoneZtwoZthreez333\L<bar>444Z	333one444)r  z(?i)333\L<bar>444Z	333TWO444Z
333four444s   ones   twos   threes   333\L<bar>444s	   333one444s   (?i)333\L<bar>444s	   333TWO444s
   333four444z3\L<bar>4\L<bar>+5z^\L<options>zsolid QWERTZgoodZ	brilliantz	+s\ol[i}d)r   z+solid QWERTz+solidZSTRASSEz(?fi)\L<words>u   straße)wordsr   r   Zstressr:   Zkitz(?i)\L<words>ZSKITSr%   rt   u   SKİTSz(?fi)\b(\w+) +\1\bu    straße STRASSE r  u    STRASSE straße z^\L<options>$rh   )r   r   )r   r   )r   r:   )r%   rt   )r%   rt   )r%   r  )r%   r  )r   r   )r   r   r*   rf   rK   r   r   rL   r    rN  r)   r(   )r   r   r	   r	   r
   test_named_lists
  sV    






zRegexTests.test_named_listsc             C   sP  | j tttjd| j | j tttjd| j | j tttjd| j | j tttjd| j | j tttjd| j | j tttjd| j d}| j tjd|d  | j tjd	|jd
dd | j tjd|d  | j tjd|d
 d | j tjd|d
 d d}| j tjd|jd
dd | j tjd|jd
dd | j tjd|jd
dd | j tjd|jd
dd | j tjd|jd
dd | j tjd|jd
dd | j tttjd| j | j tjddjd
dd | j tjddjd
dd | j tjd!djd
dd | j tjd$d%jd
dd | j tjd$d'd  | j tjd(d)jd
dd | j tjd+d,jd
dd | j tjd+d.jd
dd | j tjd/d.jd
dd | j tjd2d3jd
dd | j tjd2d4jd
dd | j tjd2d5jd
ddŃ | j tjd2d6jd
ddȃ | j tjd2d7jd
dd˃ | j tjd2d8jd
dd΃ | j tjd2d9jd
ddу | j tjd2d:jd
ddԃ | j tjd2d;jd
dd׃ | j tjd2d<jd
ddڃ | j tjd2d=d  | j tjd2d>d  | j tjd2d?d  | j tjd2d@d  | j tjd2dAd  | j tjdBdCjd
dd݃ | j tjdEdCjd
dd | j tjdHdIjd
dd | j tjdHdJd  | j tjdHdKjd
dd dL}| j tjdM|jd
dd | j tjdO|jd
dd | j tjdR|jd
dd | j tjdVdWdXj	 dYdZd[g | j tjdVd\dXj	 dYd]dZg | j tjd^d\dXj	 dYd[dZg | j tjd_dWdXj	 dYd`dZg | j tjdadWdXj	 dYd[dZg | j tjd_d\dXj	 dYdZd[g | j tjdbdcddj	 dYdedfg | j tjdbdgddj	 dYdhdeg | j tjdidgddj	 dYdfdeg | j tjdjdcddj	 dYdkdeg | j tjdldcddj	 dYdfdeg | j tjdjdgddj	 dYdedfg | j tjdmdnj
 d | j tjdqdnj
 d | j tjdrdsj
 d | j tjdvdwdwdxg | j tjdydzdzdxg | j tjd{d|j d | j tjd{d}j d | j tjd{dj d | j tjd{dd  | j tjd{dj d | j tjddjd | j tjddjd | j tjddjd | j tjddjd | j tjddjd | j tjddjd
ddd"gd gg f | j ttjddd d S )Nz(fou){s,e<=1}z(fuu){s}z
(fuu){s,e}z(anaconda){1i+1d<1,s<=1}z(anaconda){1i+1d<1,s<=1,e<=10}z(anaconda){s<=1,e<=1,1i+1d<1}z-molasses anaconda foo bar baz smith anderson z(znacnda){s<=1,e<=3,1i+1d<1}z(znacnda){s<=1,e<=3,1i+1d<2}r   r%   r5      z(ananda){1i+1d<2}z(?:\bznacnda){e<=2}Zanacondaz(?:\bnacnda){e<=2}z#anaconda foo bar baz smith andersonz(fuu){i<=3,d<=3,e<=5}z(?b)(fuu){i<=3,d<=3,e<=5}r6   z(fuu){i<=2,d<=2,e<=5}r:   z(?e)(fuu){i<=2,d<=2,e<=5}z(fuu){i<=3,d<=3,e}z(?b)(fuu){i<=3,d<=3,e}z(approximate){s<=3,1i+1d<3}z(foobar){e}Zxirefoabralfobarxier   z(?e)(foobar){e}r&   z(?b)(foobar){e}r7   r   z(foobar){e<=2}Zxirefoabrzlfdrt   Zxirefoabzlfdz(foobar){i<=2,s<=2,e<=2}Zoobargoobaploowapr  z\b(foobar){e}\bZzfoobarzr   zboing zfoobarz goobar woopz(?b)\b(foobar){e}\br  r  z^(foobar){e<=1}$ZfoobarZxfoobarZfoobarxZfooxbarZfoxbarZxoobarZfoobaxZoobarZfobarZfoobaZxfoobarxZfoobarxxZxxfoobarZxfoxbarZfoxbarxz (foobar){i<=1,d<=2,s<=3,2d+1s<4}Z(3oifaowefbaoraofuiebofasebfaobfaorfeoaror8   z$(?b)(foobar){i<=1,d<=2,s<=3,2d+1s<4}"   '   zfoo(bar){e<=1}zapZ	foobarzapZfobarzapZfoobrzapzxwww.cnn.com 64.236.16.20
www.slashdot.org 66.35.250.150
For useful information, use www.slashdot.org
this is demo data!
z(?s)^.*(dot.org){e}.*$x   z(?es)^.*(dot.org){e}.*$]   d   z^.*(dot.org){e}.*$w      e   z\b\L<words>{e<=1}\bz book cot dog desk zcat dog)r  ZcotZdogz book dog cot desk z dogz(?e)\b\L<words>{e<=1}\bz(?r)\b\L<words>{e<=1}\bzdog z(?er)\b\L<words>{e<=1}\bs   \b\L<words>{e<=1}\bs    book cot dog desk s   cat dogs   cots   dogs    book dog cot desk s    dogs   (?e)\b\L<words>{e<=1}\bs   (?r)\b\L<words>{e<=1}\bs   dog s   (?er)\b\L<words>{e<=1}\bz(\w+) (\1{e<=1})zfoo four  fouz(?r)(\2{e<=1}) (\w+)s   (\w+) (\1{e<=1})s   foo fou   foo   fouz(?:(?:QR)+){e}rX  rh   z	(?:Q+){e}re   z(?:service detection){0<e<5}zservic detectionzservice detectr  zservice detectizservice detectionzin service detection   z(?:cats|cat){e<=1}catz(?e)(?:cats|cat){e<=1}z(?:cat|cats){e<=1}catsz(?e)(?:cat|cats){e<=1}z(?:cat){e<=1} (?:cat){e<=1}zcat cotz/(?e)(GTTTTCATTCCTCATA){i<=4,d<=4,s<=4,i+d+s<=8}ZATTATTTATTTTTCATAz(?:fo){e<=1}|(?:fo){e<=2}ZFOTr5   r  r5   r  )r  r  r   r   r   r   )r  r  r5   r6   r5   r6   )r  r  r:   r6   r:   r6   )r	  r
  r5   r6   r5   r6   )r  r  r   r   r   r   )r  r  r5   r6   r5   r6   )r  r  r   r   r   r   )r  r  r   r&   r   r&   )r  r  r7   r   r7   r   )r  r  rt   r5   rt   r5   )r  r  r  r7   r  r7   )r  r  r   r   r   r   )r  r  r   r   r   r   )r  r  r  r  r  r  )r  r   r   r   r   r   )r!  r"  r   r:   r   r:   )r#  r$  r   r:   r   r:   )r%  r&  r   r:   r   r:   )r'  r(  r   r   r   r   )r)  r*  r   r   r   r   )r+  r,  r   r   r   r   )r-  r.  r   r  r   r  )r/  r0  r   r  r   r  )r1  r2  r   r  r   r  )r3  r4  r   r8   r   r8   )r5  r6  r  r  r  r  )r7  r8  r   r5   r&   r   )r9  r:  r   r   r&   r  )r;  r<  r   r  r  r  )r=  r>  r   r  r  r  )r?  r@  r   r  r  r  )rA  rB  )r  r  )r  r  )r  r  )r   r   )r   r  )r   r  )r   r   )r   r   r%   )r   r   r   )r   r%   r   )r   r   r   )r%   r   r   )r   rK   r   r   r   rL   r(   r)   r    r~   r   r*   	fullmatchfuzzy_countsfuzzy_changesr   )r   rx  r	   r	   r
   
test_fuzzyA
  s4   
















































zRegexTests.test_fuzzyc             C   sB  | j tjddd d  d1 | j tjddd d  d2 | j tjddd d  d3 | j tjdd	d d  d4 | j tjddd d  d5 | j tjddd  | j tjddd d  d6 | j tjddd d  d7 | j tjddd d  d8 | j tjdd	d d  d9 | j tjddd d  d: | j tjddd  | j tjddd d  d; | j tjddjdddddg | j tjddd d  d< | j tjddjdddddg | j tjddd d  d= | j tjddd d  d> | j tjddd d  d? | j tjd!dd d  d@ tjd"}| j t|jd#d$ | j t|jd%d& | j t|jd'd$ | j t|jd(d& | j t|jd)d& | j t|jd*d& | j t|jd+d$ | j t|jd,d$ | j t|jd-d& | j t|jd.d$ | j t|jd/d$ | j t|jd0d$ d S )ANz(\w)(?:(?R)|(\w?))\1r3   r   rh   r   r4   r\   abbakayakr  Zpaperpapr   Zdontmatchmez(?r)\2(?:(\w?)|(?R))(\w)z\(((?>[^()]+)|(?R))*\)
(ab(cd)ef)rY  r%   r   r   z(cd)z(?r)\(((?R)|(?>[^()]+))*\)z\(([^()]+|(?R))*\)zsome text (a(b(c)d)e) more text(a(b(c)d)e)rC  z(?r)\(((?R)|[^()]+)*\)z!(foo(\(((?:(?>[^()]+)|(?2))*)\)))foo(bar(baz)+baz(bop))(bar(baz)+baz(bop))bar(baz)+baz(bop)z%(?r)(foo(\(((?:(?2)|(?>[^()]+))*)\)))zv^\s*(<\s*([a-zA-Z:]+)(?:\s*[a-zA-Z:]*\s*=\s*(?:'[^']*'|"[^"]*"))*\s*(/\s*)?>(?:[^<>]*|(?1))*(?(3)|<\s*/\s*\2\s*>))\s*$z<foo><bar></bar></foo>Tz<foo><bar></foo></bar>Fz<foo><bar/></foo>z<foo><bar></foo>z<foo bar=baz/>z<foo bar="baz">z<foo bar="baz"/>z<    fooo   /  >z	foo<foo/>z<foo>foo</foo>z<foo><bar/>foo</foo>z<a><b><c></c></b></a>)r3   r   rh   )r   r4   r\   )rG  r4   N)rH  r  N)rI  r   r4   )r3   rh   r   )r   r\   r4   )rG  Nr4   )rH  Nr  )rI  r4   r   )rJ  rY  )rJ  r   )rK  rC  )rK  r4   )rL  rL  rM  rN  )rL  rL  rM  rN  )r   r   r(   r  r   r   )r   Zrgxr	   r	   r
   test_recursive  sr    







 
 
zRegexTests.test_recursivec             C   s  t jd}| jtj||k | jtj||k |jd}| jtj||k	 | jtj||k	 | j|jd k	 tj|}|j  | j|jd k	 | j|jd k t jdd}tj|}| j	t
|j d | j	t
|j d t jdd}tj|}| j	t
|j d | j	t
|j d t jdd}tj|}| j	t
|d | j	t
|d t jdd}tj|}| j	t
|d | j	t
|d d S )Nr4   r/   r   r\   r}   za b)r   r   Z
assertTruecopydeepcopyr*   r   Zdetach_stringr  r   r  rf   r   )r   rr0   m2r  Zit2r	   r	   r
   	test_copyI  s6    






zRegexTests.test_copyc             C   sv   | j tjdddd | j tjdddd | j tjdddd	 | j tjdddd
 | j tjddjdd d S )Nz(\w+) (\w+)z{0} => {2} {1}zfoo barfoo bar => bar fooz(?<word1>\w+) (?<word2>\w+)z{word2} {word1}bar foor%   )rU  r%   )rV  r%   )r   r   subfZsubfnr*   expandf)r   r	   r	   r
   test_formatt  s    




zRegexTests.test_formatc             C   sH  | j ttjddd | j ttjddd | j ttjddddd | j ttjdddd	d | j ttjdd
dd	d | j ttjdd
dddd | j ttjddd | j ttjddd | j ttjddddd | j ttjdddd	d | j ttjdd
dd	d | j ttjdd
dddd d S )Nre   Tr  Fr&   )r   Zxabcr%   )r   r  rt   )r   r   z(?r)abc)r   r   r   rC  )r   r	   r	   r
   test_fullmatch  s"    zRegexTests.test_fullmatchc             C   sv  | j tjdddd | j tjdtdtdd | j tjdddd | j tjdtdtdd | j tjdtdtdd | j tjdtdtdd xd	td	fD ]}| j tjd
|dddddg tj	d)kr8| j tjd|ddddddddg | j tjd|dd
dddd
dddddddddg q| j tjd|ddddg | j tjd|dd
dd
dddg qW xdtdtdtdfD ]}| j tjd|dddddg tj	d*kr| j tjd|ddddddddg | j tjd|dddddddddddddddg n>| j tjd|ddddg | j tjd|dddddddg qW xddtdfD ]T}| j tj
d|d
ddg | j tj
d|d
ddg | j tj
d |d+d,d-g qlW xpd!td!td!td!fD ]T}| j tj
d"|ddd#g | j tj
d$|ddd#g | j tj
d%|d.d/d0g qW xdtdfD ]}| jtjd|j f  | jtjd&|j d1 | jtjd&|jdd | jtjd&|jd'd | jtjd&|jd'd'd2 qDW xdtdtdtdfD ]}| jtjd|j f  | jtjd(|j d3 | jtjd(|jdd | jtjd(|jd'd | jtjd(|jd'd'd4 qW d S )5Nr   r4   rX   Zxaz   yrA  s   xyzs   xazz:a:b::crx   rh   r\   ry   r&   r:   r   z:*z(:*)::s   :a:b::c   :r   r'  r)  s   :*s   (:*)   ::z
a:b::c:::dz:+z:::z(:+)z(:)(:*)s
   a:b::c:::ds   :+s   :::s   (:+)s   (:)(:*)z(a)r%   s   (a))r&   r:   r   )r&   r:   r   )rx   rh   )rx   rx   )rx   r\  )r]  r   )r]  r]  )r]  r^  )r4   )r4   r4   )rA  )rA  rA  )r   r   r@   r   r   	bytearray
memoryviewr~   ra   rb   r    r   r*   r   rf   )r   r   r	   r	   r
   test_issue_18468  s    "



zRegexTests.test_issue_18468c             C   s  | j tjddddjd | j tjddddj d# | j tjddddjd | j tjddddj d$ | j tjdd
ddd  | j tjddddjd | j tjddddj d% | j tjddddjd | j tjddddj d& | j tjddddjd | j tjddddgdjd | j tjddddgdj d' | j tjddddgdjd | j tjddddgdj d( | j tjddddgdjd | j tjddddgdj d) | j tjddddgdjd | j tjddddgdj d* | j tjddddgdd  | j tjddddj d+ | j tjddddj d, | j tjddddj d- | j tjddddj d. | j tjdd ddj d/ | j tjdd!ddd  | j tjdd"ddd  d S )0Nr   r4   T)partialr   r%   r  r  r&   Zcatchzabc\w{3}r   Fr   rX  r  z\d{4}$1234z	\L<words>post)rb  r  rt   r   z(?fi)\L<words>POSTu   poﬆPOSz	[a-z]*4R$rq   Zab4Za4Za4RZ4aZa44)r   r%   )r   r&   )r   r   )r   r  )r   rt   )r   r&   )r   rt   )r   r&   )r   r%   )r   rq   )r   r&   )r   rq   )r   r&   )r   r   r*   rb  r)   )r   r	   r	   r
   test_partial  s^    zRegexTests.test_partialc          	   C   s5  | j ttjdtjdd | j ttjdtjdd | j tjddddg | j tjd	dddg | j tjdd
dg | j tjdddg | j tjdddg | j dd tjddD dg | j tjddtjtjB j	dd | j tjddtjtjB j	dd | j tjddtjtjB j	dd | j tjddj
 d | j ttjddtjdd | j tjd d!j	dd"d | j tjd$d%j	dd"d | j tjd&d'j	dd' | j tjd(d)j	dd"d | j tjd+d)d  | j tjd,d-j	dd | j tjd.d/jd"d | j tjd.d0jd"d | j tjd.d2jd"d | j tjd4d2j	 d2 | j tjd5d6j d | j tjd7d/j d | j tjd7d0j d | j tjd8dj	dd | j tjd9d2tjdj	dd2 | j tjd:d;jdd"d | j tjd<d;jdd"d | j tjd=d;jdd"d | j tjd?d;jdd"d | j tjdAdBj	dd/ | j tjdCdDdEdFgdGdHdIdEdJdKdLg | j tjdMdDdNdOdFdPdKdLg | j tjdQdDdHdIdEdJdKdLg | j tjdRdDdHdIdEdJdKdLg | j tjdSd/j	dd"d1d | j tjdTdUjdd"d | j tjdVd/j	dd"d | j tjdWd/dX d  | j tjdYdZd  | jtj| jd[d\  | j tjd]d^jdd | j tjd`daj	dda | j tjdbdcd  | j tjddded  | j tjdfdgj	dd"d1d | j tjdidjd%dkg | j tjdldjd%dkg | j tjdmdjd%dkg | j tjdndjd%dkg | j tjdodpj	 dp | j dqd tjdrdsD dtdug | j tjdvdwjdxdydzd{g | jtj| jd|d\  d}}d~}| j tj||tjd d | j tjdddg | j ttjdddtjtd | j tjddd  | j tjddjdddg | j tjddd\ dd tjdtjd}| j |jdd  | j |jdg  | jtj| jdd\  | j tjdddd | j tjdddd | j tjdd | j tjdddd | j tjdddd | j tjdd | j tjddj
 d | j tjddj
 d | j tjddj
 d tjdtjtjB d}| j dd |jdD dg | j |jddg d}| j dd |j|D dg | j |j|dg tjdtjtjB tjB d}| j dd |jdD dg | j |jddg d}| j dd |j|D dg | j |j|dg tjdkr| j tjddddU n| j tjdddd | j tjddddU tjdk	rD| j tjdddd n| j tjdddd | j tjdddd | j tjdddtjdd | j tjddj d | j tjddj d | j tjddj d | j tjddj d | j tjddj d | j tjddj d | j tjddj d | j tjddj d | j tjddj d | j tjddj d | j tjddj d | j tjddj dÃ | j tjddj dă | j tjddj dŃ | j tjddj dƃ | j tjddg  | j tjdddd | j ttjd/d/tj!d | j tjddŃd!dg | j tjddŃd!dg | j tjddŃd!dg | j tjddŃd!dg | jtjddd\  | j tjdd/j	dd"d1dǃ | j tjdd/j	dd"d1dȃ d#j"dd΄ t#dσD }| j td#j"tjd|td#j"tjd| | j td#j"tjd|td#j"tjd| | j td#j"tjd|td#j"tjd| | j td#j"tjd|td#j"tjd| | j td#j"tjd|td#j"tjd| | j td#j"tjd|td#j"tjd| | j td#j"tjd|td#j"tjd| | j td#j"tjd|td#j"tjd| | j td#j"tjd|td#j"tjd| | j td#j"tjd|td#j"tjd| | j td#j"tjd|td#j"tjd| | j td#j"tjd|td#j"tjd| | j td#j"tjd|td#j"tjd| | j td#j"tjd|td#j"tjd| t$t#d}| j tdj"tjd|tdj"tjd| | j tdj"tjd|tdj"tjd| | j tdj"tjd|tdj"tjd| | j tdj"tjd|tdj"tjd| | j tdj"tjd|tdj"tjd| | j tdj"tjd|tdj"tjd| | j tdj"tjd|tdj"tjd| | j tdj"tjd|tdj"tjd| | j tdj"tjd|tdj"tjd| | j tdj"tjd |tdj"tjd| | j tdj"tjd|tdj"tjd| | j tdj"tjd|tdj"tjd| | j tdj"tjd|tdj"tjd| | j tdj"tjd|tdj"tjd	| | j ttjd
dj	 td | j tjddj
 dɃ | j tjdddd | j tjdddd | j tj%dddd | j tj%dddd | j tj&ddddj dʃ | j tj&ddddj'd | j tjddddj d˃ | j tjddddj d̃ | j tjddddj d̓ | j tjddj d΃ | j tjddd  | j tjdd dϐdАdg | j tjd$d dҐdӐdg | j d%d tjd&d'D dՐd֐dאdg | j d)d tjd*d'D dِdڐdېdg | j tjd+d,d d, | j tjd+d-d d- | j tjd.d/d d/ | j tjd0d1d d1 | j tjd2dj	dd"d݃ | j tjd4d5d3d6g | j tjd7d5dd8g | j tjd9dj	dd"dރ | j tjd:d5d;dg | j tjd<d5d8dg | j tjd=d>d d> | j tjd?d@d d# | j tjdAd@d d# | j tjdBd@d  | j tjdCd@d d@ | j tjdDdEd dE | j tjdDdFd dG | j tjdHdEd dI | j tjdHdFd dG | j tjdJdFd dF | j tjdJdKd dG | j tjdLdKd dG | j tjdMdKd dG | j tjdNd@d  | j tjdOd@d d@ | j tjdPdEd dE | j tjdPdFd dG | j tjdQdFd dF | j tjdQdKd dG | j tjdRdKd dG | j tjdSdKd dG | j tjdTdEd dE | j tjdTdFd dG | j tjdUdEd dI | j tjdUdFd dG | j tjdVdFd dF | j tjdVdKd dG | j tjdWdKd dG | j tjdXdKd dG | j tjdYdEd dE | j tjdYdFd dG | j tjdZdFd dF | j tjdZdKd dG | j tjd[dKd dG | j tjd\dKd dG d]}| j t(tjd^|d" | j tjd_d`j d߃ | j tjdadbd db tjdc}dd}	| j ded |j|	D ddg | j tjdhditjj d | j tjdkditjj d | j tjdmdnj d | j tjdodnd  | j tjdpdqj d | j tjdpdrdsdtg | j tjdudvj	dd"d | j tjdxdvj	dd"d | j tjdudydvdw | j tjdxdydvdw | j tjdzd{d!gd|j d | j tjd}d{d!gd|j d | j tjd~dj d | j tjddj d | j tjddj d | j tjddj d | j tjddj d tjdddgd}
t)j*|
}t)j+|}
| j |
jdj d | j tjddtjdj d | j tjddtjdj d | j tjddtjdd  | j tjddtjdj d | j tjddtjdj d | j tjddtjdd  | j,tjdd\  | j,tjdd\  | j ttjdd | j ttjdd | j tjddtj-ddg | j tjddddj d d}d}| j ttjd| |d | j ttjd| |d | j ttjd| |d | j ttjd| |d | j ttjd| |d | j ttjd| |d | j ttjddddgdd | j ttjddddgdd | j ttjddddgdd | j ttjddddgdd | j tjddddgdj d | j tjddddgdj d  | j tjddj d | j tjddj d | j tjddj d | j tjddd  | j tjddj d | j tjddj d d}d}| j ttj||d | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j tjddj
 d | j tjddtjj d | j tjddtjj d | j tjdĐdtjj d	 | j tjdĐdtjj d
 | j tjdŐdtjj d | j tjdŐdtjj d | j tjdɐdtjtjB dj d | j tjdːd5d8g | j tjd̐d5d8g | j tjd͐d΃ddg | j tjdՐd΃g  | j tjd֐d΃dg | j tjdאd΃dddg | j tjdڐdۃj	 d܃ | j tjdݐdۃj	 d܃ | j tjdސd߃j	 d | j tjdd߃j	 d | j tjddۃj	 d܃ | j tjddۃj	 d܃ | j tjdd߃j	 d | j tjdd߃j	 d | j tjddj	 d | j tjddj	 d | j tjddj	 d | j tjddj	 d | j tjddddd | j tjddddd | j tjddddd | j tjddddd | j tjdd | j tjddcj d | j tjddj d | j tjddj d | j tjdd#j d | j tjdd#j d | j tjdd%j
 d | j tjdd%j. dd i | j tjdd%j/ dd/gi | j tjdd%j
 d | j tjdd%j. dd i | j tjdd%j/ dd/gi | j tjdd%j
 d | j tjdd%j. dd i | j tjdd%j/ dd/gi | j ttjddd | j tjddddj d | j tjddddj d | j ttjddd | j ttjd dd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjdd	d | j ttjd
d	d | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j tj&dd%jdd/d!dg | j tj&dd%j	dd! | j tj&dd%jdd/d!dg | j tj&dd%j	dd | j tjddddj'd | j tjddddj'd | j tjdd#ddj'd | j tjddddj'd | j tjddddj'd | j tjddddj'd | j tjddddj'd | j tjddddj'd | j tjddddj'd | j tjddddj'd | j tjddddj'd | j tjddddj'd | j tjdd#ddj'd | j tjddddj'd | j tjddddj'd | j tjddddj'd | j tjddddj'd | j tjddddj'd | j tjd dddj'd | j tjd dddj'd | j tjd!d#ddj'd | j tjd"d#ddj'd | j tjd#d#ddj'd | j tjd$d#ddj'd | j tjd%d#ddj'd | j tjd&d#ddj'd | j tjd$d/ddj'd | j tjd%d/ddj'd | j tjd&d/ddj'd | j tjd'd#ddj'd | j tjd(d#ddj'd | j tjd)d#ddj'd | j tjd*d#ddj'd | j tjd+d#ddj'd | j tjd,d#ddj'd | j tjd*d/ddj'd | j tjd+d/ddj'd | j tjd,d/ddj'd | j tjd-d.ddj'd d/}d0}tj||tjd}| j |j d | j |j0g d1gg f | j tjd2d3j d | j tjd2d4j d  | j tjd5d6d6g | j ttjd7d/d | j ttjd8d/d | j tj&d9d@j d! | j tjd:d;j/ d<gg d<gd= | j ttjd>d?d | j ttjd@d?d | j tjdAdBj0g g dd"d3dgf | j tjdCdj d" | j tjdCdj0dgg d"gf | j tjdDdj d# | j tjdDdj0g g dgf | j tjdEdj d$ | j tjdEdj0g g dgf | j tjdFdGj d% | j tjdHdGj d& | j tjdIdGj d' | j tjdJdKj d( | j tjdLdKj d) | j tj&dMdNj d* | j tj&dOdNj d+ | j tjdPdQd  | j ttjdRd | j ttjdSd | j tjdTdUd@d	dVg | j tjdWdUd@d	dVg | j tjdXdYtj1dj d, | j ttjdZd-d | j ttjd[d.d | j tjd\d]j	 d] | j tjd\d^d  | j tjd_d`j	 d` | j tjd_dad  | j tjd_d`j0g d3gg f | j tjdbd`j	 d` | j tjdcd`j0g d3gg f | j tjddj2ded#ded#g | j tjddj2dfd#dfd#g | j tjdgjdhd  | j tjdijdjd  tjdktjtj3B d}| j |jdlj	 dl | j |jdmj	 dn | j |jdoj	 dp | j |jdqj	 dr ds}dt}tj||tjd}| j |j d/ | j |j. dvdwdxdydzd{ tj||tj-d}| j |j d0 | j |j. dvdwdxdydzd{ d|}d}}tj||tjd}| j |j d1 | j |j0g g g f d~}tj||tjd}| j |j d2 | j |j0ddgg g f | j tjdddd | j tj%dddd | j tjddj4ddf | j tjddj5dd | j tjddd  | j tjddtjdd  | j tjddj d3 | j tjddj d4 | j tjddd  | j tjddj d5 | j tjdd%j6 d%gd/d!dgf | j tjdd%j7 d6gd7d8d9gf | j ttj&ddd | j ttj&ddd | j tjddcd  | j tjddcj d: d S (;  Nz(?>b))r   Tz^((?>\w+)|(?>\s+))*$z\((?:(?>[^()]+)|(?R))*\)za(bcd(e)f)g(h)z	(bcd(e)f)z(h)z\((?:(?:[^()]+)|(?R))*\)za(b(cd)e)f)g)hz(b(cd)e)za(bc(d(e)f)ghz(d(e)f)z(?r)\((?:(?>[^()]+)|(?R))*\)c             S   s   g | ]}|j  qS r	   )rf   )r{   r0   r	   r	   r
   r|   .  s    z+RegexTests.test_hg_bugs.<locals>.<listcomp>z\((?:[^()]*+|(?0))*\)za(b(c(de)fg)hz	(c(de)fg)za(bc)dr  r   z([\da-f:]+)$r  rC  z^(?=ab(de))(abd)(e)Zabder   r   z\ r}   z^(a|)\1{2}br\   r%   rh   z	^(a){0,0}re   z(?>.*/)bza/bz(?V0)((?i)blah)\s+\1	blah BLAHblahz(?V1)((?i)blah)\s+\1z(\()?[^()]+(?(1)\)|)z(abcdz(a*)*r4   r   rq   r'   r&   z	a(?#xxx)*z(?=abc){3}abcZ	abcabcabcz^(?:a(?:(?:))+)+za(?x: b c )dza#comment
*z(?V1)(a(?(1)\1)){1}Z
aaaaaaaaaaz(?V1)(a(?(1)\1)){2}z(?V1)(a(?(1)\1)){3}r   z(?V1)(a(?(1)\1)){4}r6   z(?V1)(a)(?<=b(?1))Zbazz(?fi)\L<keywords>u)   POST, Post, post, poſt, poﬆ, and poﬅrd  r   )keywordsre  ZPostu   poſtu   poﬆu   poﬅz(?fi)pos|postrf  ZPosu   poſz(?fi)post|posz(?fi)post|anotherz(?V1)((a)(?1)|(?2))z(?V1)(\1xx|){6}r3   z(a|)+z(a|)*\dP   z^(?:a?b?)*$r   c               S   s
   t jdS )Nz\N{1})r   r   r	   r	   r	   r
   r1     s    z)RegexTests.test_hg_bugs.<locals>.<lambda>z\Zza
a
rt   z(q1|.)*(q2|.)*(x(a|bc)*y){2,}Zxayxayz(?i)[^a]r=   z(?i)[[:ascii:]]u   Kz((a|b(?1)c){3,5})Zbaaaacar  z(?<=:\S+ )\w+z:9 abc :10 defr  z(?<=:\S* )\w+z(?<=:\S+? )\w+z(?<=:\S*? )\w+z(?:fe)?maleZfemalec             S   s   g | ]}|j  qS r	   )rf   )r{   r0   r	   r	   r
   r|     s    z!(fe)?male: h(?(1)(er)|(is)) (\w+)z(female: her dog; male: his cat. asdsasdazfemale: her dogzmale: his catz (?<rec>\((?:[^()]++|(?&rec))*\))zaaa(((1+0)+1)+1)bbbZrecz(1+0)z	((1+0)+1)z(((1+0)+1)+1)c               S   s   t jdddS )Nr   \)r   r@   r	   r	   r	   r
   r1     s    z%(CAGCCTCCCATTTCAGAATATACATCC){1<e<=2}ZtcagacgagtgcgttgtaaaacgacggccagtCAGCCTCCCATTCAGAATATACATCCcgacggccagttaaaaacaatgccaaggaggtcatagctgtttcctgccagttaaaaacaatgccaaggaggtcatagctgtttcctgacgcactcgtctgagcgggctggcaaggZtCAGCCTCCCATTCAGAATATACATCCzc..+/cz
cA/c
cAb/czcAb/cz(\w+)z[\1]u#   अन्‍न ന്‍ किनu)   [अन्‍न] [ന്‍] [किन]z.*a.*ba.*aaZababbaz(?<x>a(?<x>b))r   r   z(-)c             S   s
   | j dS )Nr   )r   )r0   r	   r	   r
   r1     s    za-b-cZaxbxcz\bt(est){i<2}z	Some textc               S   s
   t jdS )Nz.???)r   r   r	   r	   r	   r
   r1     s    zfoo!?F)special_onlyzfoo\!\?zfoo!\?s   foo!?s   foo\!\?s   foo!\?z^([^z]*(?:WWWi|W))?$WWWiz^([^z]*(?:WWWi|w))?$z^([^z]*?(?:WWWi|W))?$r$   c             S   s   g | ]}|j  qS r	   )rf   )r{   r   r	   r	   r
   r|   !  s    Zyxxxc             S   s   g | ]}|j  qS r	   )rf   )r{   r   r	   r	   r
   r|   %  s    c             S   s   g | ]}|j  qS r	   )rf   )r{   r   r	   r	   r
   r|   *  s    c             S   s   g | ]}|j  qS r	   )rf   )r{   r   r	   r	   r
   r|   .  s    r:   z(?V0).*r<   z(?V1).*z(?V0).*?r   z	|||||||||z	|t|e|s|t|z(?V1).*?z^(@)\n(?!.*?@)(.*)z\1\n==========\n\2z@
z@
==========
z(?:cats|cat){e<=1}Zcazz(?e)(?:cats|cat){e<=1}z(?b)(?:cats|cat){e<=1}z(?:cat){e<=1}z(?e)(?:cat){e<=1}z(?b)(?:cat){e<=1}z(?:cats){e<=2}zc atsz(?e)(?:cats){e<=2}z(?b)(?:cats){e<=2}zc a tsz(?:cats){e<=1}z(?e)(?:cats){e<=1}z(?b)(?:cats){e<=1}z\bof ([a-z]+) of \1\bz#To make use of one of these modulesz\g<0>z(?V1)[[b-e]--cd]r   z(?V1)[b-e--cd]z(?V1)[[bcde]--cd]z(?V1)[bcde--cd]z ^unknown property at position 4$c               S   s
   t jdS )Nz\p{})r   r   r	   r	   r	   r
   r1   }  s    z(?:()|(?(1)()|z)){2}(?(2)a|z)z(?:()|(?(1)()|z)){0,2}(?(2)a|z)c             s   s   | ]}t |V  qd S )N)rA   )r{   ry   r	   r	   r
   r~    s    z*RegexTests.test_hg_bugs.<locals>.<genexpr>i   z[[:alnum:]]+z[\p{Alpha}\p{PosixDigit}]+z[[:alpha:]]+z
\p{Alpha}+z[[:ascii:]]+z[\p{InBasicLatin}]+z[[:blank:]]+z[\p{gc=Space_Separator}\t]+z[[:cntrl:]]+z\p{gc=Control}+z[[:digit:]]+z[0-9]+z[[:graph:]]+z<[^\p{Space}\p{gc=Control}\p{gc=Surrogate}\p{gc=Unassigned}]+z[[:lower:]]+z
\p{Lower}+z[[:print:]]+z%(?V1)[\p{Graph}\p{Blank}--\p{Cntrl}]+z[[:punct:]]+z2(?V1)[\p{gc=Punctuation}\p{gc=Symbol}--\p{Alpha}]+z[[:space:]]+z\p{Whitespace}+z[[:upper:]]+z
\p{Upper}+z[[:word:]]+zL[\p{Alpha}\p{gc=Mark}\p{Digit}\p{gc=Connector_Punctuation}\p{Join_Control}]+z[[:xdigit:]]+z[0-9A-Fa-f]+r   r   s   (?a)[[:alnum:]]+s   (?a)[\p{Alpha}\p{PosixDigit}]+s   (?a)[[:alpha:]]+s   (?a)\p{Alpha}+s   (?a)[[:ascii:]]+s   (?a)[\x00-\x7F]+s   (?a)[[:blank:]]+s   (?a)[\p{gc=Space_Separator}\t]+s   (?a)[[:cntrl:]]+s   (?a)\p{gc=Control}+s   (?a)[[:digit:]]+s
   (?a)[0-9]+s   (?a)[[:graph:]]+s@   (?a)[^\p{Space}\p{gc=Control}\p{gc=Surrogate}\p{gc=Unassigned}]+s   (?a)[[:lower:]]+s   (?a)\p{Lower}+s   (?a)[[:print:]]+s&   (?aV1)[\p{Graph}\p{Blank}--\p{Cntrl}]+s   (?a)[[:punct:]]+s3   (?aV1)[\p{gc=Punctuation}\p{gc=Symbol}--\p{Alpha}]+s   (?a)[[:space:]]+s   (?a)\p{Whitespace}+s   (?a)[[:upper:]]+s   (?a)\p{Upper}+s   (?a)[[:word:]]+sP   (?a)[\p{Alpha}\p{gc=Mark}\p{Digit}\p{gc=Connector_Punctuation}\p{Join_Control}]+s   (?a)[[:xdigit:]]+s   (?a)[0-9A-Fa-f]+z\X$u   ab℃u   ℃z([^L]*)([^R]*R)LtRz(.)zx\1yZxayxbyz(?r)(.)zx{1}yz(a)*abc)rb  ZOXRGZOOGOXr  z.XRGz	.{1,3}XRGzR|RRz(.)(?(1)(?!))r8  z(y)?(\d)(?(1)\b\B)Zax1y2z3brT   2rs  z(y)?+(\d)(?(1)\b\B)c             S   s   g | ]}|j  qS r	   )r)   )r{   r0   r	   r	   r
   r|     s    z(?i)(?:error){e}zregex failurer8   c             S   s   g | ]}|j  qS r	   )r)   )r{   r0   r	   r	   r
   r|   	  s    z(?fi)(?:error){e}z(?p)\d+(\w(\d*)?|[eE]([+-]\d+))Z10b12z10E+12z(?p)(\w|ae|oe|ue|ss)aez(?p)one(self)?(selfsufficient)?Zoneselfsufficientz(ab\Kcd)r   z
\w\w\K\w\wZabcdefghZghz(\w\w\K\w\w)Zefghz(?r)(ab\Kcd)z(?r)\w\w\K\w\wrY  z(?r)(\w\w\K\w\w)z6(?(DEFINE)(?<quant>\d+)(?<item>\w+))(?&quant) (?&item)z5 elephantsz12(*FAIL)|3Z123z(?r)12(*FAIL)|3z\d+(*PRUNE)\dz\d+(?=(*PRUNE))\dz\d+(*PRUNE)bcd|[3d]Z123bcdZ123zzdr   z\d+?(*PRUNE)bcd|[3d]Z3bcdz\d++(?<=3(*PRUNE))zzd|[4d]$Z124zzdz\d++(?<=(*PRUNE)3)zzd|[4d]$z\d++(?<=2(*PRUNE)3)zzd|[3d]$z(?r)\d(*PRUNE)\d+z(?r)\d(?<=(*PRUNE))\d+z(?r)\d+(*PRUNE)bcd|[3d]z(?r)\d++(?<=3(*PRUNE))zzd|[4d]$z(?r)\d++(?<=(*PRUNE)3)zzd|[4d]$z (?r)\d++(?<=2(*PRUNE)3)zzd|[3d]$z\d+(*SKIP)bcd|[3d]z\d+?(*SKIP)bcd|[3d]z\d++(?<=3(*SKIP))zzd|[4d]$z\d++(?<=(*SKIP)3)zzd|[4d]$z\d++(?<=2(*SKIP)3)zzd|[3d]$z(?r)\d+(*SKIP)bcd|[3d]z(?r)\d++(?<=3(*SKIP))zzd|[4d]$z(?r)\d++(?<=(*SKIP)3)zzd|[4d]$z(?r)\d++(?<=2(*SKIP)3)zzd|[3d]$zJune 30, December 31, 2013 2012
some words follow:
more words and numbers 1,234,567 9,876,542
more words and numbers 1,234,567 9,876,542z(?<!\d)(?>2014|2013 ?2012)z1(?>2)Z12zn(?V1w)(?=(?=[^A-Z]*+[A-Z])(?=[^a-z]*+[a-z]))(?=\D*+\d)(?=\p{Alphanumeric}*+\P{Alphanumeric})\A(?s:.){8,255}+\ZzAAaa11!!z(?smx)
(?(DEFINE)
  (?<subcat>
   ^,[^,]+,
   )
)

# Group 2 is defined on this line
^,([^,]+),

(?:(?!(?&subcat)[\r\n]+(?&subcat)).)+
zP
,Cat 1,
,Brand 1,
some
thing
,Brand 2,
other
things
,Cat 2,
,Brand,
Some
thing
c             S   s   g | ]}|j d dqS )r%   rq   )r)   )r{   r0   r	   r	   r
   r|     s    6   ;   z(abcdefgh){e}z******abcdefghijklmnopqrtuvwxyzr  z(abcdefghi){e}r  z(?:(?=\d)\d+\b|\w+)r  z(?(?=\d)\d+\b|\w+)z (?(?<=love\s)you|(?<=hate\s)her)z
I love youz&I love you but I don't hate her eitherZyouZherz(?p)a*(.*?)aaabbbbbbz
(?p)a*(.*)z\1z(?irV0)\L<kw>Z21)kwz(?irV1)\L<kw>za|bZ111a222z(?r)a|bz(?if)<(CLI)><\1>z
<cli><cli>z
<cli><clI>z(?ifr)<\1><(CLI)>z\L<options>r  r  )r   z(x{6}){e<=1}Zxxxxxxxxxxxz(?r)(x{6}){e<=1}c               S   s
   t jdS )Ns   00000\0\00\^(\00\U05000000)r   r   r	   r	   r	   r
   r1     s    c               S   s
   t jdS )Ns   {e<l)r   r   r	   r	   r	   r
   r1     s    z	((?0)){e}z	 ?(?0){e}z0((brown)|(lazy)){1<=e<=3} ((dog)|(fox)){1<=e<=3}z+The quick borwn fax jumped over the lzy hogborwnfaxlzyhogz\d\d\d-\d\d-\d\d\d\dz$My SSN is 999-89-76, but don't tell.$   u   Йu   йz(?ui)z(?ai)z(?afi)z
(?i)\L<aa>Z22Z121)r   z(?ri)\L<aa>z(?fi)\L<aa>z(?fri)\L<aa>z(?r)\1dog..(?<=(\L<aa>))$ZccdogccZbcbccz(?ir)\1dog..(?<=(\L<aa>))$z(2)(?:\1{5}){e<=1}Z3222212z(\d)(?:\1{5}){e<=1}z&\A(?P<whole>(?>\((?&whole)\)|[+\-]))\Zz((-))z((-)+)zx.*? (.).*\1(.*)\1z	x  |y| z|r5   z\.sr (.*?) (.)(.*)\2(.*)\2(.*)z#.sr  h |<nw>|<span class="locked">|#   z"\xF9\x80\xAEqdz\x95L\xA7\x89[\xFE \x91)\xF9]\xDB'\x99\x09=\x00\xFD\x98\x22\xDD\xF1\xB6\xC3 Z\xB6gv\xA5x\x93P\xE1r\x14\x8Cv\x0C\xC0w\x15r\xFFc%" z(?P<http_referer>((?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``)))) (?P<useragent>((?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``))))zfoo(?<=foo)zfoo(?<!foo)zfoo(?<=foo|x)zfoo(?<!foo|x)z0(?(?=.*\!.*)(?P<true>.*\!\w*\:.*)|(?P<false>.*))r  z\w*(ea)\w*|\w*e(?!a)\w*Zeasiereaz(^1234$){i,d}Z12234z(^1234$){s,i,d}z(^123$){s,i,d}Zxxxxxxxx123r7   r   za?yzZxxxxyzz(?:(?![a-d]).)+z.(?(DEFINE)(?P<mydef>(?:(?![a-d]).)))(?&mydef)+z((\w{1,3})(\.{2,10})){1,3}z("Erm....yes. T..T...Thank you for that."Erm....Erm....T...T...z((\w{1,3})(\.{2,10})){3}z((\w{1,3})(\.{2,10})){2}z((\w{1,3})(\.{2,10})){1}T....z(?:ESTONIA(?!\w)){e<=1}zESTONIAN WORKERSZESTONIANz(?:ESTONIA(?=\W)){e<=1}z(?:(?<!\w)ESTONIA){e<=1}zBLUB NESTONIAZNESTONIAz(?:(?<=\W)ESTONIA){e<=1}z(?r)(?:ESTONIA(?!\w)){e<=1}z(?r)(?:ESTONIA(?=\W)){e<=1}z(?r)(?:(?<!\w)ESTONIA){e<=1}z(?r)(?:(?<=\W)ESTONIA){e<=1}z(?:A.*B.*CDE){e<=2}zA B CYZz(?:A.*B.*?CDE){e<=2}z(?:A.*?B.*CDE){e<=2}z(?:A.*?B.*?CDE){e<=2}z ,0A[)rm  Zliteral_spacesz\ \,0A\[z \,0A\[z\ ,0A\[z ,0A\[z(?(?=A)A|B)rZ  z
(?(?=A)A|)z
(?(?=X)X|)z(?(?=X))z(?(DEFINE)(?<func>.))(?&func)funcz!(?(DEFINE)(?<func>.))(?=(?&func))z#(?(DEFINE)(?<func>.)).(?<=(?&func))zab(?#comment\))cdz[a-z]+ [a-z]*?:zfoo barz(?r):[a-z]*? [a-z]+z(?u)\p{Script:Beng}u   ৯z(?u)\p{Script:Bengali}z!(?u)\p{Script_Extensions:Bengali}z(?u)\p{Script_Extensions:Beng}z(?u)\p{Script_Extensions:Cakm}z(?u)\p{Script_Extensions:Sylo}z(?u)\p{scx:Latin}r  z(?u)\p{scx:Ahom}z(?u)\p{scx:Common}4z(?u)\p{scx:Caucasian_Albanian}z(?u)\p{scx:Arabic}u   تz(?u)\p{scx:Balinese}z(?u)\p{scx:Devanagari}u   जz(?u)\p{scx:Batak}z(?P<x>.)*(?&x)ry   z(?P<x>.)(?P<x>.)(?P<x>.)z(?:ab)*Zababz(?:ab)*?z(?:ab)*+z(?:ab)+z(?:ab)+?z(?:ab)++z(?r)(?:ab)*z(?r)(?:ab)*?z(?r)(?:ab)*+z(?r)(?:ab)+z(?r)(?:ab)+?z(?r)(?:ab)++za*za*?za*+za+za+?za++z(?r)a*z(?r)a*?z(?r)a*+z(?r)a+z(?r)a+?z(?r)a++z(?:\s*\w+'*)+Zwhateveraz  (?P<termini5>GGCGTCACACTTTGCTATGCCATAGCAT[AG]TTTATCCATAAGATTAGCGGATCCTACCTGACGCTTTTTATCGCAACTCTCTACTGTTTCTCCATAACAGAACATATTGACTATCCGGTATTACCCGGCATGACAGGAGTAAAA){e<=1}(?P<gene>[ACGT]{1059}){e<=2}(?P<spacer>TAATCGTCTTGTTTGATACACAAGGGTCGCATCTGCGGCCCTTTTGCTTTTTTAAGTTGTAAGGATATGCCATTCTAGA){e<=0}(?P<barcode>[ACGT]{18}){e<=0}(?P<termini3>AGATCGG[CT]AGAGCGTCGTGTAGGGAAAGAGTGTGG){e<=1}A?  GCACGGCGTCACACTTTGCTATGCCATAGCATATTTATCCATAAGATTAGCGGATCCTACCTGACGCTTTTTATCGCAACTCTCTACTGTTTCTCCATAACAGAACATATTGACTATCCGGTATTACCCGGCATGACAGGAGTAAAAATGGCTATCGACGAAAACAAACAGAAAGCGTTGGCGGCAGCACTGGGCCAGATTGAGAAACAATTTGGTAAAGGCTCCATCATGCGCCTGGGTGAAGACCGTTCCATGGATGTGGAAACCATCTCTACCGGTTCGCTTTCACTGGATATCGCGCTTGGGGCAGGTGGTCTGCCGATGGGCCGTATCGTCGAAATCTACGGACCGGAATCTTCCGGTAAAACCACGCTGACGCTGCAGGTGATCGCCGCAGCGCAGCGTGAAGGTAAAACCTGTGCGTTTATCGATGCTGAACACGCGCTGGACCCAATCTACGCACGTAAACTGGGCGTCGATATCGACAACCTGCTGTGCTCCCAGCCGGACACCGGCGAGCAGGCACTGGAAATCTGTGACGCCCTGGCGCGTTCTGGCGCAGTAGACGTTATCGTCGTTGACTCCGTGGCGGCACTGACGCCGAAAGCGGAAATCGAAGGCGAAATCGGCGACTCTCATATGGGCCTTGCGGCACGTATGATGAGCCAGGCGATGCGTAAGCTGGCGGGTAACCTGAAGCAGTCCAACACGCTGCTGATCTTCATCAACCCCATCCGTATGAAAATTGGTGTGATGTTCGGCAACCCGGAAACCACTTACCGGTGGTAACGCGCTGAAATTCTACGCCTCTGTTCGTCTCGACATCCGTTAAATCGGCGCGGTGAAAGAGGGCGAAAACGTGGTGGGTAGCGAAACCCGCGTGAAAGTGGTGAAGAACAAAATCGCTGCGCCGTTTAAACAGGCTGAATTCCAGATCCTCTACGGCGAAGGTATCAACTTCTACCCCGAACTGGTTGACCTGGGCGTAAAAGAGAAGCTGATCGAGAAAGCAGGCGCGTGGTACAGCTACAAAGGTGAGAAGATCGGTCAGGGTAAAGCGAATGCGACTGCCTGGCTGAAATTTAACCCGGAAACCGCGAAAGAGATCGAGTGAAAAGTACGTGAGTTGCTGCTGAGCAACCCGAACTCAACGCCGGATTTCTCTGTAGATGATAGCGAAGGCGTAGCAGAAACTAACGAAGATTTTTAATCGTCTTGTTTGATACACAAGGGTCGCATCTGCGGCCCTTTTGCTTTTTTAAGTTGTAAGGATATGCCATTCTAGACAGTTAACACACCAACAAAGATCGGTAGAGCGTCGTGTAGGGAAAGAGTGTGGTACCi  z)(?e)(dogf(((oo){e<1})|((00){e<1}))d){e<2}ZdogfoodZdogfootz\Xu   👨‍👩‍👧‍👦z(?=a)az(?!b)az
((\d)*?)*?zX(?(DEFINE)(?<mydef>(?<wrong>THIS_SHOULD_NOT_MATCHx?)|(?<right>right))).*(?<=(?&mydef).*)zx rightrt  )ZmydefZwrongrt  z(?:cat){e<=1:[u]}Zcutz(?:cat){e<=1:u}z?(?be)(AGTGTTCCCCGCGCCAGCGGGGATAAACCG){s<=5,i<=5,d<=5,s+i+d<=10}ZTTCCCCGCGCCAGCGGGGATAAACCGz	(?:bc){e}z(?e)(?:bc){e}z(?b)(?:bc){e}z,(?e)(?:^(\$ )?\d{1,3}(,\d{3})*(\.\d{2})$){e}z$ 10,112.111.12z/(?e)(?:^(\$ )?\d{1,3}(,\d{3})*(\.\d{2})$){s<=1}z9(?e)(?:^(\$ )?\d{1,3}(,\d{3})*(\.\d{2})$){s<=1,i<=1,d<=1}z/(?e)(?:^(\$ )?\d{1,3}(,\d{3})*(\.\d{2})$){s<=3}z$ 10,1a2.111.12z/(?e)(?:^(\$ )?\d{1,3}(,\d{3})*(\.\d{2})$){s<=2}z(?e)(?:0?,0(?:,0)?){s<=1,d<=1}z,0;0z(?e)(?:0??,0(?:,0)?){s<=1,d<=1}z#\b(?e)(?:\d{6,20}){i<=5:[\-\\\/]}\bz-cat dog starting at 00:01132.000. hello worldz(?#)z(?x)(?#)z(\d+){i<=2:[ab]}Z123X4Y55z(?i)(\d+){i<=2:[ab]}z^(test){e<=5}$Zterstinz(?:(x*)\1\1\1)*x$z(?:(x*)\1{3})*x$zt(?:es){s<=1:\d}tZte5tZteztzt(?:es){i<=1:\d}tZtes5tZtesztzt(es){i<=1,0<e<=1}tzt(?:es){i<=1,0<e<=1:\d}tz(\d+ week|\d+ days)z7 daysz10 daysz[ ]* Name[ ]*\* z  Name *za|\.*pb\.pyz.geojsa?  (?<=(?:\A|\W|_))(\d+ decades? ago|\d+ minutes ago|\d+ seconds ago|in \d+ decades?|\d+ months ago|in \d+ minutes|\d+ minute ago|in \d+ seconds|\d+ second ago|\d+ years ago|in \d+ months|\d+ month ago|\d+ weeks ago|\d+ hours ago|in \d+ minute|in \d+ second|in \d+ years|\d+ year ago|in \d+ month|in \d+ weeks|\d+ week ago|\d+ days ago|in \d+ hours|\d+ hour ago|in \d+ year|in \d+ week|in \d+ days|\d+ day ago|in \d+ hour|\d+ min ago|\d+ sec ago|\d+ yr ago|\d+ mo ago|\d+ wk ago|in \d+ day|\d+ hr ago|in \d+ min|in \d+ sec|in \d+ yr|in \d+ mo|in \d+ wk|in \d+ hr)(?=(?:\Z|\W|_))z1 month agoz9 hours 1 minute agoz1 minute agoz10 months 1 hour agoz
1 hour agoz1 month 10 hours agoz10 hours agoZ2TTCAGACGTGTGCTCTTCCGATCTCAATACCGACTCCTCACTGTGTGTCTzw(?P<insert>.*)(?P<anchor>CTTCC){e<=1}(?P<umi>([ACGT]){4,6})(?P<sid>CAATACCGACTCCTCACTGTGT){e<=2}(?P<end>([ACGT]){0,6}$)2   ZTTCAGACGTGTGCTZCTTCCZGATCTZCAATACCGACTCCTCACTGTGTZGTCT)insertanchorZumiZsidr   zt(?P<insert>.*)(?P<anchor>AACACTGG){e<=1}(?P<umi>([AT][CG]){5}){e<=2}(?P<sid>GTAACCGAAG){e<=2}(?P<end>([ACGT]){0,6}$)Z&GGAAAACACTGGTCTCAGTCTCGTAACCGAAGTGGTCGZ&GGAAAACACTGGTCTCAGTCTCGTCCCCGAAGTGGTCGr     z(test1)|(test2)zmatched: \1\2Ztest1zmatched: test1zmatched: {1}{2}z(?:\bha\b){i:[ ]}Zhavingz	(?a:\w)\wu   dжz(?a:\w)(?u:\w)z	^\p{LC}+$u   😺z	^\p{So}+$z(.)+z\p{HorizSpace}+u4   	   ᠎             　z\p{VertSpace}+u   
  z(?(?<=A)|(?(?![^B])C|D)))r   r   rC  )r\   rh   )rh   N)rh  ri  )r%   r%   )rq   rq   )r&   r&   )r   r&   )r   r%   )r   rq   r   r%   r   r%   )r  r  r   r&   r%   r&   )r  r  r   r   r&   r   )r  r  r   r6   r   r6   )r  r  )r4   r4   Nr   rq   rq   rq   )r  r  )r4   rh   )rt   rt   )r  r  r4   )r%   rq   )r   rq   )rn  )rn  )rn  )r&   r:   r   )r&   r:   r   )r%   r   r   )r%   r   r   )r%   r   r   )r%   r   r   )r%   r   r   )r%   r   r   )r%   r%   r   )r   r%   r   )r   r%   r   )r   rq   r   )r   rq   r   )r   rq   r   )r   r%   r   )r   r%   r   )r   r%   r   )r4   rh   rh   )r4   rh   rh   )rh   ro  )r   rq   )r&   r  )r&   r  )r%   r  )r   r%   )rh   rT   )rh   rq  )rh   rs  )rh   rT   )rh   rq  )rh   rs  )r   r  )r  r6   )r6   r8   )r8   r8   )r   r  )r  r6   )r6   r8   )r8   r8   )r   r  )r   r  )r   rq   r   r   r   r   rq   r:   )r  r  r   r   r   r   rs  rt  )r  r  )r   r  )r   r  )r   r   )r:   r6   )ru  rv  )ru  rv  )r%   rq   )r%   rq   )r&   rt   )r&   rt   )r   r6   )r   r6   )r   r6   )r   r&   )r   r   )r   r  )r   r   )r   r  )ry  ry  rh   rz  rh   rz  )r{  rh   r{  r|  r|  rh   )r}  r}  )r   r:   )r   r:   )r%   r:   )r%   r:   )r   r  )r   r5   )r   r  )r  )r   r  )r   r%   r   )r   r  )r   r%   r   )r   r7   )r   r   r   )rt   r   )r  r  r  )r  r  r  )r  r  r  )r  r  r  )r  r  r  )r  r  r  )r   r%   )r   r%   )r   r   )r   r   )r   r   )N)N)N)r   r:   )r   r:   )r   r%   r   )r   r   r   )r%   r   r   )r   r&   )r%   r   r%   )r   r   r%   )r   r   r%   )r   r   r  )r%   r   r   )r%   r   r   )rq   r   r   )rq   r   r   )r%   r   r   )r%   r   r   )r   r&   r   rx  rx  )r   r  )r   r  )r   r   r   )rq   r   r   )r   rq   )r   rq   )r   r%   )r   r&   )r   r%   )r%   rq   )rq   r&   )r%   r%   )8r   r   r   r   ZV1r    r  r(   rE   rf   r   r*   r;   r)   rG   rY   UNDEF_CHAR_NAMEr  r  Z	BESTMATCHr;  r@   ZWORDZspansr  r   ZFULLCASEr   r   ra   rb   r   rD  DEBUGr   r   r   rW  rC  rb  r  pickledumpsloadsr  ZENHANCEMATCHr   r{  rE  rZ  r~   ZV0r   rX  ZallcapturesZallspans)r   Zfzseqrxr   rawrQ  rx  Z
TEST_REGEXZ	TEST_DATArR  r   Zupper_iZlower_ir4   Zpy_regex_patternrF   r0   sequencer	   r	   r
   test_hg_bugs  s>   















































	         """" 


  



 
	
$$(($"(.zRegexTests.test_hg_bugsc             C   s  | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjd	dd | j ttjd
dd | j ttjd	dd | j ttjd
dd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjddd | j ttjdd d | j ttjd!d"d | j ttjd!d#d | j ttjdd$d | j ttjdd%d | j ttjd&d'd | j ttjd&d(d d S ))Nz(?r)(?:a){e<=1:[a-z]}rC  Tz(?:a){e<=1:[a-z]}r`   Frr  za-z(?:ab){e<=1:[a-z]}z(?r)(?:ab){e<=1:[a-z]}z(a)\1{e<=1:[a-z]}z(?r)\1{e<=1:[a-z]}(a)r  z-az4(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}tsstz5(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}z-szs-z4(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}ZssstZsstsz5(?firu)\1{e<=1:[a-z]}(\N{LATIN SMALL LETTER SHARP S})ZstssZtssszss-szsss-z5(?firu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}z(?fiu)(ss)\1{e<=1:[a-z]}u   ßtsu   ßstz(?firu)\1{e<=1:[a-z]}(ss)u   stßu   tsßu   ß-su   ßs-z(?firu)(ss)\1{e<=1:[a-z]}u   s-ßu   -sß)r   r   r   rC  )r   r	   r	   r
   test_fuzzy_ext  s    zRegexTests.test_fuzzy_extc             C   s   | j tjddjdd | j tjddjdd | j tjddjdd | j tjdddd | j tjdddd | j tjdddd d S )Nz	(?P<x>.)+re   z{0} {0[0]} {0[-1]}zabc abc abcz0{1} {1[0]} {1[1]} {1[2]} {1[-1]} {1[-2]} {1[-3]}zc a b c c b az0{x} {x[0]} {x[1]} {x[2]} {x[-1]} {x[-2]} {x[-3]})r   r   r*   rX  rW  )r   r	   r	   r
   test_subscripted_capturesD  s     







z$RegexTests.test_subscripted_capturesc             C   s   t jdkr| jtjddddddddg | jtjdd	dd
 | jtjdddddddg | jdd tjddD dddddg | jdd tjddD dddg d S )Nr&   r:   r   z\b|:+za::bcrh   r4   r   r`   z-a---bc-z::c             S   s   g | ]}|j  qS r	   )r)   )r{   r0   r	   r	   r
   r|   ^  s    z2RegexTests.test_more_zerowidth.<locals>.<listcomp>r%   r  c             S   s   g | ]}|j  qS r	   )r)   )r{   r0   r	   r	   r
   r|   `  s    z
(?m)^\s*?$z	foo


barrt   )r&   r:   r   )r   r   )r%   r%   )r%   r&   )r&   r&   )r  r  )rt   rt   )rt   r  )r  r  )ra   rb   r   r   r~   r@   r    r  )r   r	   r	   r
   test_more_zerowidthW  s    


zRegexTests.test_more_zerowidth)N)r   r   r   rL   rI   rZ   ri   rl   rj   rk   rn   r  r  r   r   r,  r-  r.  r/  r0  r1  r  r  r  r  r  r  ZDUPLICATE_GROUPrc  r  r   r#   r+   r.   rB   rC   rD   rJ   rM   r[   r^   r_   rc   rg   ro   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r  r  r!  r"  r%  r2  r7  r<  r>  rS  rU  rV  r_  r`  ra  rb  rd  rf  rg  rh  rm  rn  ro  rp  ry  rz  r|  r  r  r  r  r  r  r  r  rF  rO  rT  rY  rZ  ra  rg  r  r  r  r  r	   r	   r	   r
   r      s"  
9	3%!X			" 9b:	0*6M     m	6 BG+L5         \Xr   c               C   s   t jdd d S )Nrq   )	verbosity)unittestmainr	   r	   r	   r
   	test_mainc  s    r  __main__)weakrefr   rP  r  r   r   ra   r  r-   r   r   r   ZTestCaser   r  r   r	   r	   r	   r
   <module>   s\                                     s