B
     \M                 @   s  d dl mZ d dlZd dlmZ d dlmZ d dlmZ	 ddl
mZmZmZ d dlmZ ejdd d	k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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#d.d/ Z$d0d1 Z%d2d3 Z&G d4d5 d5eeZ'd6d7d8d9d:d;gZ(d<d=d=d>d?d@dAdBd6dCdDd;dEgZ)e	*edFG dGdH dHe'Z+e	*edFG dIdJ dJe'Z,e-dKkre	.  dS )L    )print_functionN)permutations)njit   )TestCaseno_pyobj_flagsMemoryLeakMixin)TypingError   )      c               C   s   dS )Nu   大处着眼，小处着手。 r   r   r   7lib/python3.7/site-packages/numba/tests/test_unicode.pyliteral_usecase   s    r   c             C   s   | S )Nr   )xr   r   r   passthrough_usecase   s    r   c             C   s   | |kS )Nr   )r   yr   r   r   
eq_usecase   s    r   c             C   s   t | S )N)len)r   r   r   r   len_usecase   s    r   c             C   s   | | S )Nr   )r   ir   r   r   getitem_usecase#   s    r   c             C   s   | | S )Nr   )r   r   r   r   r   concat_usecase'   s    r   c             C   s   | |7 } | S )Nr   )r   r   r   r   r   inplace_concat_usecase+   s    r   c             C   s   | |kS )Nr   )r   r   r   r   r   
in_usecase0   s    r   c             C   s   | |k S )Nr   )r   r   r   r   r   
lt_usecase4   s    r   c             C   s   | |kS )Nr   )r   r   r   r   r   
le_usecase8   s    r   c             C   s   | |kS )Nr   )r   r   r   r   r   
gt_usecase<   s    r   c             C   s   | |kS )Nr   )r   r   r   r   r   
ge_usecase@   s    r   c             C   s
   |  |S )N)find)r   r   r   r   r   find_usecaseD   s    r    c             C   s
   |  |S )N)
startswith)r   r   r   r   r   startswith_usecaseH   s    r"   c             C   s
   |  |S )N)endswith)r   r   r   r   r   endswith_usecaseL   s    r$   c             C   s
   |  |S )N)split)r   r   r   r   r   split_usecaseP   s    r&   c             C   s   |  ||S )N)r%   )r   r   maxsplitr   r   r   split_with_maxsplit_usecaseT   s    r(   c             C   s   | j ||dS )N)r'   )r%   )r   r   r'   r   r   r   !split_with_maxsplit_kwarg_usecaseX   s    r)   c             C   s   |   S )N)r%   )r   r   r   r   split_whitespace_usecase\   s    r*   c             C   s
   |  |S )N)join)r   r   r   r   r   join_usecase`   s    r,   c             C   s   dg}|   | |S )N )popr+   )r   lr   r   r   join_empty_usecased   s    r0   c                   s   e Zd Z fddZ  ZS )BaseTestc                s   t t|   d S )N)superr1   setUp)self)	__class__r   r   r3   l   s    zBaseTest.setUp)__name__
__module____qualname__r3   __classcell__r   r   )r5   r   r1   k   s   r1   asciiZ12345Z
1234567890u   ¡Y tú quién te crees?u   🐍⚡u   大处着眼，小处着手。r-   ZaaabZaababZascZascihZasciju   大处着眼，小处着手u%   大处着眼，小处着手。🐍⚡z,unicode support requires Python 3.4 or laterc               @   s  e Zd ZefddZefddZefddZdd Zefd	d
ZefddZ	efddZ
efddZefddZefddZefddZefddZefddZdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zefd'd(Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Z efd;d<Z!efd=d>Z"efd?d@Z#efdAdBZ$efdCdDZ%efdEdFZ&dGdH Z'dIdJ Z(dKdL Z)dMdN Z*dOdP Z+dQdR Z,dSdT Z-dUdV Z.dWS )XTestUnicodec             C   s   t }| j||d d S )N)flags)r   Zrun_nullary_func)r4   r>   pyfuncr   r   r   test_literal   s    zTestUnicode.test_literalc             C   s2   t }t|}x tD ]}| |||| qW d S )N)r   r   UNICODE_EXAMPLESassertEqual)r4   r>   r?   cfuncsr   r   r   test_passthrough   s    
zTestUnicode.test_passthroughc          	   C   sR   t }t|}x@tD ]8}x2ttD ]&}| ||||||d||f  q W qW d S )Nz%s, %s)r   r   rA   reversedrB   )r4   r>   r?   rC   ar;   r   r   r   test_eq   s    
zTestUnicode.test_eqc          	   C   s   |}t |}x2tD ]*}| ||||||d|j||f  qW xdttddD ]T\}}| ||||||d|j||f  | ||||||d|j||f  qNW d S )Nz%s: "%s", "%s"r
   )r)r   UNICODE_ORDERING_EXAMPLESrB   r6   r   )r4   Zusecaser?   rC   rG   r;   r   r   r   _check_ordering_op   s     
zTestUnicode._check_ordering_opc             C   s   |  t d S )N)rK   r   )r4   r>   r   r   r   test_lt   s    zTestUnicode.test_ltc             C   s   |  t d S )N)rK   r   )r4   r>   r   r   r   test_le   s    zTestUnicode.test_lec             C   s   |  t d S )N)rK   r   )r4   r>   r   r   r   test_gt   s    zTestUnicode.test_gtc             C   s   |  t d S )N)rK   r   )r4   r>   r   r   r   test_ge   s    zTestUnicode.test_gec             C   s2   t }t|}x tD ]}| |||| qW d S )N)r   r   rA   rB   )r4   r>   r?   rC   rD   r   r   r   test_len   s    
zTestUnicode.test_lenc          	   C   sx   t }t|}xftD ]^}xXdd dd|d d |dd  ||| gD D ]&}| ||||||d||f  qFW qW d S )Nc             S   s   g | ]}|qS r   r   ).0r   r   r   r   
<listcomp>   s    z/TestUnicode.test_startswith.<locals>.<listcomp>r-   r   r   z%s, %s)r"   r   rA   rB   )r4   r>   r?   rC   rG   r;   r   r   r   test_startswith   s    
4zTestUnicode.test_startswithc          	   C   sx   t }t|}xftD ]^}xXdd dd|d d |dd  ||| gD D ]&}| ||||||d||f  qFW qW d S )Nc             S   s   g | ]}|qS r   r   )rQ   r   r   r   r   rR      s    z-TestUnicode.test_endswith.<locals>.<listcomp>r-   r   rS   r   z%s, %s)r$   r   rA   rB   )r4   r>   r?   rC   rG   r;   r   r   r   test_endswith   s    
4zTestUnicode.test_endswithc          	   C   s   t }t|}xvtD ]n}dd|d d d |d d |dd  ||| g}x8dd |D D ]&}| ||||||d||f  qVW qW d S )	Nr-   xxrS   r   c             S   s   g | ]}|qS r   r   )rQ   r   r   r   r   rR      s    z'TestUnicode.test_in.<locals>.<listcomp>z'%s' in '%s'?)r   r   rA   rB   )r4   r>   r?   rC   rG   extrassubstrr   r   r   test_in   s    
0zTestUnicode.test_inc          	   C   s   t }t|}xvtD ]n}dd|d d d |d d |dd  ||| g}x8dd |D D ]&}| ||||||d||f  qVW qW d S )	Nr-   rV   rW   rS   r   c             S   s   g | ]}|qS r   r   )rQ   r   r   r   r   rR      s    z)TestUnicode.test_find.<locals>.<listcomp>z'%s'.find('%s')?)r    r   rA   rB   )r4   r>   r?   rC   rG   rX   rY   r   r   r   	test_find   s    
0zTestUnicode.test_findc          	   C   sX   t }t|}xFtD ]>}x8tt| D ]&}| ||||||d||f  q&W qW d S )Nz	'%s'[%d]?)r   r   rA   ranger   rB   )r4   r?   rC   rD   r   r   r   r   test_getitem   s    
zTestUnicode.test_getitemc          
   C   s   |    t}t|}xxtD ]p}| t}||t| W d Q R X | dt|j	 | t}||t| W d Q R X | dt|j	 qW d S )Nzstring index out of range)
disable_leak_checkr   r   rA   assertRaises
IndexErrorr   assertInstr	exception)r4   r?   rC   rD   raisesr   r   r   test_getitem_error   s    
zTestUnicode.test_getitem_errorc             C   s   t }t|}x~tD ]v}xpttt| t|D ]T}xNttt| t|D ]2}t||}| ||||||d|||f  qNW q0W qW d S )Nz'%s'[%d:%d]?)r   r   rA   listr\   r   slicerB   )r4   r?   rC   rD   r   jslr   r   r   test_slice2  s    

zTestUnicode.test_slice2c             C   s   t }t|}x~tD ]v}xpddt|t|d gD ]T}xNddt|t|d gD ]2}t||}| ||||||d|||f  qNW q0W qW d S )NrS   rW   r   z'%s'[%d:%d]?)r   r   rA   r   rg   rB   )r4   r?   rC   rD   r   rh   ri   r   r   r   test_slice2_error  s    

zTestUnicode.test_slice2_errorc             C   s   t }t|}xtD ]}xztt| t|D ]b}x\tt| t|D ]D}x>dD ]6}t|||}| ||||||d||||f  qPW qFW q,W qW d S )N)rS   rW   r   r
   z'%s'[%d:%d:%d]?)r   r   rA   r\   r   rg   rB   )r4   r?   rC   rD   r   rh   kri   r   r   r   test_slice3$  s    

zTestUnicode.test_slice3c             C   s   t }t|}xtD ]}xddt|t|d gD ]f}x`ddt|t|d gD ]D}x>dD ]6}t|||}| ||||||d||||f  qXW qNW q0W qW d S )NrS   rW   r   )rS   rW   r   r
   z'%s'[%d:%d:%d]?)r   r   rA   r   rg   rB   )r4   r?   rC   rD   r   rh   rl   ri   r   r   r   test_slice3_error1  s    

zTestUnicode.test_slice3_errorc          	   C   sX   t }t|}xFtD ]>}x8td d d D ]&}| ||||||d||f  q&W qW d S )NrW   z'%s' + '%s'?)r   r   rA   rB   )r4   r>   r?   rC   rG   r;   r   r   r   test_concat>  s    
zTestUnicode.test_concatc          
   C   s\   |    t}t|}xB||gD ]6}| t}|dd W d Q R X | dt|j qW d S )NrG   r-   zempty separator)r^   r&   r   r_   
ValueErrorra   rb   rc   )r4   r?   rC   funcrd   r   r   r   test_split_exception_empty_sepG  s    z*TestUnicode.test_split_exception_empty_sepc          
   C   sX   t }t|}xFdD ]>}| t}|d|d W d Q R X | dt|jd|  qW d S )N) NrG   g333333@Zfloat64z"non-integer maxsplit with sep = %s)r(   r   r_   r	   ra   rb   rc   )r4   r?   rC   seprd   r   r   r   (test_split_exception_noninteger_maxsplitS  s    
z4TestUnicode.test_split_exception_noninteger_maxsplitc          
   C   s\   t }t|}ddddddddd	d
g
}x2|D ]*\}}| ||||||d||f  q*W d S )N)z a N)r-   u   ⚡)abcabcu   ⚡)u   🐍⚡u   ⚡)u   🐍⚡🐍u   ⚡)abababarG   )rw   r;   )rw   c)rw   r<   )rw   abaz'%s'.split('%s')?)r&   r   rB   )r4   r?   rC   CASEStest_strsplitterr   r   r   
test_split^  s     zTestUnicode.test_splitc          
   C   s~   ddddddddd	d
g
}x`t dftdfgD ]L\}}t|}x:|D ]2\}}}| ||||||||||||f  q@W q*W d S )N)z a Nr   )r-   u   ⚡r   )rv   u   ⚡r   )u   🐍⚡u   ⚡r   )u   🐍⚡🐍u   ⚡r   )rw   rG   r
   )rw   r;   r   )rw   rx   r
   )rw   r<   r   )rw   ry      z'%s'.split('%s', %d)?z'%s'.split('%s', maxsplit=%d)?)r(   r)   r   rB   )r4   rz   r?   Zfmt_strrC   r{   r|   r'   r   r   r   test_split_with_maxsplitt  s"    
z$TestUnicode.test_split_with_maxsplitc          !   C   s   t }t|}dtt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dddg}ddd d!d"d#d$| d% g}x(|D ] }| ||||d&|f  qvW d S )'Nr-   	   
                                  i  i    i   i   i   i   i   i   i   i   i	   i
   i(   i)   i/   i_   i 0  rv   u   🐍 ⚡u   🐍 ⚡ 🐍u   🐍   ⚡ 🐍  u     🐍   ⚡ 🐍u    🐍u
   ⚡ 🐍  z'%s'.split()?)r*   r   r+   mapchrrB   )r4   r?   rC   Zall_whitespacerz   r{   r   r   r   test_split_whitespace  s"    

z!TestUnicode.test_split_whitespacec             C   sB   t }t|}ddg}x(|D ] }| ||||d|f  qW d S )Nr-   u   🐍🐍🐍z'%s'.join([])?)r0   r   rB   )r4   r?   rC   rz   rt   r   r   r   test_join_empty  s    

zTestUnicode.test_join_emptyc          	   C   sX   t }t|}| t}|ddddg W d Q R X t|j}| d| | d| d S )Nr-   r   r
   r   zInvalid use of BoundFunctionz(reflected list(int)r,   r   r_   r	   rb   rc   ra   )r4   r?   rC   rd   Zexc_messager   r   r   test_join_non_string_exception  s    
z*TestUnicode.test_join_non_string_exceptionc             C   sx   t }t|}ddddgfddddgfddddgfddgd fg}x2|D ]*\}}| ||||||d||f  qFW d S )	Nr-   rG   Zbbbbrx   u   🐍🐍🐍u   ⚡⚡r~   z'%s'.join('%s')?)r,   r   rB   )r4   r?   rC   rz   rt   partsr   r   r   	test_join  s    zTestUnicode.test_joinc             C   sL   t }t|}ddg}x2|D ]*\}}| ||||||d||f  qW d S )N)abc123)u   🐍🐍🐍u   ⚡⚡z'%s'.join('%s')?)r,   r   rB   )r4   r?   rC   rz   rt   r   r   r   r   test_join_interleave_str  s    z$TestUnicode.test_join_interleave_strc          	   C   sX   t }t|}xFtD ]>}x8td d d D ]&}| ||||||d||f  q&W qW d S )NrW   z'%s' + '%s'?)r   r   rA   rB   )r4   r>   r?   rC   rG   r;   r   r   r   test_inplace_concat  s    
zTestUnicode.test_inplace_concatc             C   s.   dd }t |}dg}| || ||  d S )Nc             S   s   | d d  S )Nr   )rG   r   r   r   r?     s    z0TestUnicode.test_pointless_slice.<locals>.pyfuncrG   )r   rB   )r4   r>   r?   rC   argsr   r   r   test_pointless_slice  s    z TestUnicode.test_pointless_slicec             C   s.   dd }t |}dg}| || ||  d S )Nc             S   s   | d d d S )NrW   r   )rG   r   r   r   r?     s    z/TestUnicode.test_walk_backwards.<locals>.pyfuncrG   )r   rB   )r4   r>   r?   rC   r   r   r   r   test_walk_backwards  s    zTestUnicode.test_walk_backwardsc             C   s.   dd }t |}dg}| || ||  d S )Nc             S   s   | d d d S )Nr
   r   )rG   r   r   r   r?     s    z-TestUnicode.test_stride_slice.<locals>.pyfuncrG   )r   rB   )r4   r>   r?   rC   r   r   r   r   test_stride_slice  s    zTestUnicode.test_stride_slicec             C   s0   dd }t |}ddg}| || ||  d S )Nc             S   s   | |k S )Nr   )rG   r;   r   r   r   r?     s    z)TestUnicode.test_basic_lt.<locals>.pyfuncr<   r;   )r   rB   )r4   r>   r?   rC   r   r   r   r   test_basic_lt   s    zTestUnicode.test_basic_ltc             C   s0   dd }t |}ddg}| || ||  d S )Nc             S   s   | |kS )Nr   )rG   r;   r   r   r   r?     s    z)TestUnicode.test_basic_gt.<locals>.pyfuncr<   r;   )r   rB   )r4   r>   r?   rC   r   r   r   r   test_basic_gt  s    zTestUnicode.test_basic_gtc             C   sd   dd }t |}xNttddD ]>\}}x4dD ],}|||g}| j|| || d|d q,W qW d S )Nc             S   sh   | dkr||kS | dkr ||kS | dkr0||k S | dkr@||kS | dkrP||kS | dkr`||kS d S d S )Nz==z!=<>z<=z>=r   )optionr   r   r   r   r   r?     s    z+TestUnicode.test_comparison.<locals>.pyfuncr
   )rI   )z==z!=r   r   z<=z>=r-   zfailed on {})msg)r   r   rJ   rB   format)r4   r?   rC   r   r   cmpopr   r   r   r   test_comparison  s    

zTestUnicode.test_comparisonc             C   sH   dd }t |}dg}| || ||  dg}| || ||  d S )Nc             S   s0   d}t | r|d |  d S | | d |  S d S )Nr   Zb123ZIOr   )r   )r   r   r   r   r   r?   (  s    z/TestUnicode.test_literal_concat.<locals>.pyfuncr   r-   )r   rB   )r4   r?   rC   r   r   r   r   test_literal_concat'  s    zTestUnicode.test_literal_concatc             C   sF   dd }t |}x0dD ](}|g}| j|| || d|d qW d S )Nc             S   sp   d}d}| dkr||kS | dkr(||kS | dkr8||k S | dkrH||kS | dkrX||kS | dkrh||kS d S d S )	NZa123Zaa12z==z!=r   r   z<=z>=r   )r   r   r   r   r   r   r?   6  s    z3TestUnicode.test_literal_comparison.<locals>.pyfunc)z==z!=r   r   z<=z>=r-   zfailed on {})r   )r   rB   r   )r4   r?   rC   r   r   r   r   r   test_literal_comparison5  s    
z#TestUnicode.test_literal_comparisonc             C   s$   dd }t |}| | |  d S )Nc               S   s   t dS )Nr   )r   r   r   r   r   r?   O  s    z,TestUnicode.test_literal_len.<locals>.pyfunc)r   rB   )r4   r?   rC   r   r   r   test_literal_lenN  s    zTestUnicode.test_literal_lenc             C   s\   dd }t |}xFdddtdd td dgD ](}|g}| j|| || d|d q,W d S )Nc             S   s   d|  S )Nr   r   )Zwhichr   r   r   r?   U  s    z0TestUnicode.test_literal_getitem.<locals>.pyfuncrW   r   r   zfailed on {})r   )r   rg   rB   r   )r4   r?   rC   rG   r   r   r   r   test_literal_getitemT  s     z TestUnicode.test_literal_getitemc             C   sF   dd }t |}x0dD ](}|g}| j|| || d|d qW d S )Nc             S   s   | dkS )NZ
9876zabiuhr   )r   r   r   r   r?   ^  s    z+TestUnicode.test_literal_in.<locals>.pyfunc)rG   91r-   Z8uhaZ987zfailed on {})r   )r   rB   r   )r4   r?   rC   rG   r   r   r   r   test_literal_in]  s    
zTestUnicode.test_literal_inc             C   sH   dd }t |}x2tdddD ]"}| j|| || d|d qW d S )Nc             S   s   d | d|fS )Nr   Zcde)r!   r#   )r   r   r   r   r   r?   h  s    z0TestUnicode.test_literal_xyzwith.<locals>.pyfuncZabcdefgr
   )rI   zfailed on {})r   )r   r   rB   r   )r4   r?   rC   r   r   r   r   test_literal_xyzwithg  s
    z TestUnicode.test_literal_xyzwithc             C   sF   dd }t |}x0dD ](}|g}| j|| || d|d qW d S )Nc             S   s   d | |  dfS )Nr   rG   )r   )r   r   r   r   r?   q  s    z-TestUnicode.test_literal_find.<locals>.pyfunc)r<   zfailed on {})r   )r   rB   r   )r4   r?   rC   rG   r   r   r   r   test_literal_findp  s    
zTestUnicode.test_literal_findN)/r6   r7   r8   r   r@   rE   rH   rK   rL   rM   rN   rO   rP   rT   rU   rZ   r[   r]   re   rj   rk   rm   rn   ro   rr   ru   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=      sV   		


			
	r=   c               @   s   e Zd Zdd Zdd ZdS )TestUnicodeInTuplec             C   s@   t dd }| | |  t dd }| | |  d S )Nc               S   s   ddk S )N)aa)bbr   r   r   r   r   f  s    z9TestUnicodeInTuple.test_const_unicode_in_tuple.<locals>.fc               S   s   ddk S )N)Zcc)r   r   r   r   r   r   r     s    )r   rB   py_func)r4   r   r   r   r   test_const_unicode_in_tuple  s    z.TestUnicodeInTuple.test_const_unicode_in_tuplec             C   s@   t dd }| | |  t dd }| | |  d S )Nc               S   s   ddk S )N)r   r   )r   r   r   r   r   r   r   r     s    z@TestUnicodeInTuple.test_const_unicode_in_hetero_tuple.<locals>.fc               S   s   ddk S )N)r   r   )r   r
   r   r   r   r   r   r     s    )r   rB   r   )r4   r   r   r   r   "test_const_unicode_in_hetero_tuple  s    z5TestUnicodeInTuple.test_const_unicode_in_hetero_tupleN)r6   r7   r8   r   r   r   r   r   r   r   {  s   r   __main__)/Z
__future__r   sys	itertoolsr   Znumbar   Znumba.unittest_supportZunittest_supportZunittestZsupportr   r   r   Znumba.errorsr	   version_infoZ_py34_or_laterr   r   r   r   r   r   r   r   r   r   r   r   r    r"   r$   r&   r(   r)   r*   r,   r0   r1   rA   rJ   Z
skipUnlessr=   r   r6   mainr   r   r   r   <module>   sv      q
