a
    ze_                     @   s   d dl mZmZ d dlZd dlZd dlZd dl mZ d dlZejZ	dddZ
dddZdd	 Zd
d ZG dd dejZedkre  dS )    )verbose
TestFailedNFc                 C   s  t r4|r td| ||dd ntd| |dd z| | }W n$ tyd   |sT t r`td Y n0 |r|d u r||krt rtd td| |||f nz|r|d urt|t|ks|d | |d | krt rtd tdt| t|t|t|f  nt rtd	 d S )
Nz{!a} % {!a} =? {!a} ... )endz{!a} % {!a} works? ...zoverflow (this is fine)noz%r %% %r == %r != %rz%s %% %s == %s != %syes)r   printformatOverflowErrorAssertionErrorlenrepr)	formatstrargsoutputlimit
overflowokresult r   &/usr/lib/python3.9/test/test_format.py
testformat   s>    
r   c           
      C   s   t | tr&t| |||| | d}n| }t|}g }t |tsF|f}t|}|d u r`d  }}	n"t |trv|d}n|}t|}	t||||| t|||	|| d S Nascii)
isinstancestrr   encode	bytearraytuple)
r   r   r   r   r   Zb_formatZ	ba_formatZb_argsZb_outputZ	ba_outputr   r   r   
testcommon2   s"    



r   c              
   C   s   zt | | W n |yn } zHt||kr8trZtd n"trDtd td|dtt| W Y d }~n6d }~0    trtd td  Y n0 td| d S )Nr   r   zUnexpected :zUnexpected exceptionz"did not get expected exception: %s)r   r   r   r   r   r   )r   r   	exceptionexcmsgexcr   r   r   test_excJ   s    
*r#   c                 C   s&   t | ||| t | d||| d S r   )r#   r   )r   r   r    r!   r   r   r   test_exc_common[   s    r$   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
dd Zdd Ze	j
dd Zdd Zdd Zdd Zdd Zdd ZdS )
FormatTestc                 C   s  t ddd t ddd t dtjdfd	d
 t dddd	d
 t dddd	d
 t dddd	d
 t ddd t dd t dd t dd t dd t dd t dd t dd t dd t ddd t dd d! t d"dd# t d"d d$ t d%dd& t d%d d' d(}t d%|d) t d%| d* t d+| d* t d,| d* t d-| d. t d/| d0 t d1| d2 t d3| d0 t d4| d5 t d4|d6 t d7|d8 t d9|d: t d;|d< t d=|d) t d>|d) t d?|d@ t dA|dB t d%t|dCdD dE}t d|dF t d| dG t dH| dG t dI| dG t dJ| dK t dL| dM t dN| dO t dP| dM t dQ| dR t dQ|dS t dT|dU t dV|dW t dX|dY t dZ|dF t d[|dF t d\|d] t d^|d_ t d`|da t db|dc t dd|de t df|dg t df| dh t di|dj t dk|dl t dm|dn t do|dp t do| dq t dr|ds t dt|du t dv|dn t dw|dx t dy|dz t d{|d| t d}|d~ t d|d t d|d t d|d t d|d d}t d"|d t d"| d t d| d t d| d t d| d t d| d t d| d t d| d t d| d t d|d t d|d t d|d t d|d t d|d t d|d t d|d t d|d t d|d t d"|d t d|d t d| d t d|d t d|d t d|d t d|d t d| d t d|d t d|d t d|d t d|d t d|d t d|d t d|d t d|d t d|d t d|d t d|d t d|dă t d|d t d|dǃ t d|dă t d%ddʃ t d%dd̃ t d%ddʃ t dfdd΃ t ddddσ t dddЃ t ddd҃ t d"ddӃ t d%ddӃ t dfddԃ t ddddՃ t dddʃ t ddd̃ t d"ddʃ t d"dd̃ t ddd܃ t dddރ trtd߃ tddtd tddtd td%dtd td%dtd tddtd tddtd d S )Nz%%r   %z%.1d)   1z%.*dr'   T)r   z%.100dZd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001z%#.117xZw0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001z%#.118xZx0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001z%f      ?z1.000000z%#.*g)m   ц>)n   r,   )r-   gQ2<bz%12.*f)i@ r*   z%#.*Gz%#.*fz%#.*Fz%x
   al    h] Z
174876e800z%oZ12Z1351035564000z%dZ10Z100000000000l   
~l!]c Z123456789012345678901234567890z-123456789012345678901234567890z%5dz%31dz%32dz  -123456789012345678901234567890z%-32dz -123456789012345678901234567890 z%032dz -0123456789012345678901234567890z%-032dz%034dz"-000123456789012345678901234567890Z"0000123456789012345678901234567890z%0+34dz"+000123456789012345678901234567890z%+34dz"   +123456789012345678901234567890z%34dz"    123456789012345678901234567890z%.2dz%.30dz%.31dZ0123456789012345678901234567890z%32.31dz  0123456789012345678901234567890Z123456________________________   l   E#=*H<V4$ Z1234567890abcdef12345z-1234567890abcdef12345z%5xz%22xz%23xz -1234567890abcdef12345z%-23xz-1234567890abcdef12345 z%023xz-01234567890abcdef12345z%-023xz%025xz-0001234567890abcdef12345Z00001234567890abcdef12345z%0+25xz+0001234567890abcdef12345z%+25xz   +1234567890abcdef12345z%25xz    1234567890abcdef12345z%.2xz%.21xz%.22xZ01234567890abcdef12345z%23.22xz 01234567890abcdef12345z%-23.22xz01234567890abcdef12345 z%XZ1234567890ABCDEF12345z%#XZ0X1234567890ABCDEF12345z%#xZ0x1234567890abcdef12345z-0x1234567890abcdef12345z%#27xz    0x1234567890abcdef12345z%#-27xz0x1234567890abcdef12345    z%#027xZ0x00001234567890abcdef12345z%#.23xZ0x001234567890abcdef12345z-0x001234567890abcdef12345z%#27.23xz  0x001234567890abcdef12345z	%#-27.23xz0x001234567890abcdef12345  z	%#027.23xz%#+.23xz+0x001234567890abcdef12345z%# .23xz 0x001234567890abcdef12345z%#+.23Xz+0X001234567890ABCDEF12345z
%#+027.23Xz+0X0001234567890ABCDEF12345z
%# 027.23Xz 0X0001234567890ABCDEF12345z	%#+27.23Xz +0X001234567890ABCDEF12345z
%#-+27.23xz+0x001234567890abcdef12345 z
%#- 27.23xz 0x001234567890abcdef12345 l   KSp.']w9
 Z 12345670123456701234567012345670z!-12345670123456701234567012345670z%5oz%33oz%34oz" -12345670123456701234567012345670z%-34oz"-12345670123456701234567012345670 z%034oz"-012345670123456701234567012345670z%-034oz%036oz$-00012345670123456701234567012345670Z$000012345670123456701234567012345670z%0+36oz$+00012345670123456701234567012345670z%+36oz$   +12345670123456701234567012345670z%36oz$    12345670123456701234567012345670z%.2oz%.32oz%.33oZ!012345670123456701234567012345670z%34.33oz" 012345670123456701234567012345670z%-34.33oz"012345670123456701234567012345670 z%#oZ"0o12345670123456701234567012345670z#-0o12345670123456701234567012345670z%#38oz&    0o12345670123456701234567012345670z%#-38oz&0o12345670123456701234567012345670    z%#038oZ&0o000012345670123456701234567012345670z%#.34oZ$0o0012345670123456701234567012345670z%-0o0012345670123456701234567012345670z%#38.34oz&  0o0012345670123456701234567012345670z	%#-38.34oz&0o0012345670123456701234567012345670  z	%#038.34oz%#+.34oz%+0o0012345670123456701234567012345670z%# .34oz% 0o0012345670123456701234567012345670z	%#+38.34oz& +0o0012345670123456701234567012345670z
%#-+38.34oz&+0o0012345670123456701234567012345670 z
%#- 38.34oz& 0o0012345670123456701234567012345670 z
%#+038.34oz&+0o00012345670123456701234567012345670z
%# 038.34oz& 0o00012345670123456701234567012345670z%#.33oZ#0o012345670123456701234567012345670z%#.32oz%035.33oZ#00012345670123456701234567012345670z	%0#35.33o*   Z42iz-42g      E@Z0x1Z0X1Z0o1r   Z0o00Z0x0Z0X0B   i"   i%gg?z1.1z%#gz1.10000Testing exceptionszincomplete formatz% %sz2unsupported format character '%' (0x25) at index 2z(%d format: a number is required, not str   1z*%d format: a number is required, not bytesz*%x format: an integer is required, not strQ	@z,%x format: an integer is required, not float)	r   sysmaxsizefloatr   r   r$   
ValueError	TypeError)selfbigr   r   r   test_common_formatb   sD   







zFormatTest.test_common_formatc                 C   s   t ddd t ddd t ddd t ddd tr<td td	d
td tddtd tddtd tddtd tdtjd
 td tddtd tddtd tddtd t	dkrzdt	df  W n t
y   Y n
0 tdd S )Nz%ru   ͸z'\u0378'z%au   ʹu   'ʹ'z'\u0374'r6   zabc %br'   z2unsupported format character 'b' (0x62) at index 5r5   r(   zmust be real number, not strz	no formatz4not all arguments converted during string formattingz%cz%c arg not in range(0x110000)r8   z%c requires int or charab   x%*d!"%*d"%(maxsize, -127) should fail)r   r   r   r#   r<   r=   r
   r9   
maxunicoder:   MemoryErrorr   r>   r   r   r   test_str_format  s4    zFormatTest.test_str_formatc                 C   s.  t ddd t ddd t dtdd t ddd t ddd	 G d
d dt}| }t ddd t dtdd t d|d t dtdd t ddd t dtdd t d|d t dtdd t ddd t ddd t ddd t ddd t ddd t ddd t ddd t ddd tr4td tddtd tddtd  td!dtd" td!dtd" td!tdtd" tdd#td$ tdd%td$ tdd&d' td$ tdd(td) tdd*td) tddtd) tdd+td, tdd-td, t	d.kr*zd/t	d0f  W n t
y    Y n
0 td1d S )2Ns   %c         Zs   %5cA   s       As   %-5cs   A    c                   @   s   e Zd Zdd ZdS )z=FormatTest.test_bytes_and_bytearray_format.<locals>.FakeBytesc                 S   s   dS )N   123r   rJ   r   r   r   	__bytes__J  s    zGFormatTest.test_bytes_and_bytearray_format.<locals>.FakeBytes.__bytes__N)__name__
__module____qualname__rQ   r   r   r   r   	FakeBytesI  s   rU   s   %bs   abcs   defrP   s   %ss   %ar8   s   3.14s   ghis   b'ghi'Zjkls   'jkl'u   Մs   '\u0544's   %rr6   s   %gr(   z float argument required, not strr7   z"float argument required, not bytess	   no formatz3not all arguments converted during bytes formattingrA   z%c arg not in range(256)         s   Zaz5%c requires an integer in range(256) or a single byteYZXczR%b requires a bytes-like object, or an object that implements __bytes__, not 'str'ZWdrD   rE   rF   rG   )r   r   object
memoryviewr   r   r#   r=   r
   r:   rI   r   )r>   rU   Zfbr   r   r   test_bytes_and_bytearray_format?  s    
z*FormatTest.test_bytes_and_bytearray_formatc                 C   s4   t ddd t ddd tddd t dd	d
 d S )Nza br   za%cb)r   za%sb)zc dzac dbs   a%sb)s   c ds   ac db)r   r   rJ   r   r   r   test_nul  s    zFormatTest.test_nulc                 C   s  t ddd | tddd | tddd | td	d
d | tddd | tddd | tddd | tddd | td	dd | tddd | tddd | tddd | tddd | td	dd | tdd d! | tdd"d# d S )$Nu   €=%fr)   u   €=1.000000abcu    <5u	   abc  {   u	   123  g(@u    <6u
   12.3  y                u    <4u   0j  y      ?       @u    <8u   (1+2j)  u    >5u	     abcu	     123u    >6u
     12.3u    >8u     (1+2j)u    >4u     0ju    ^5u	    abc u	    123 u    ^6u
    12.3 u    ^8u    (1+2j) u    ^4u    0j )r   assertEqualr	   rJ   r   r   r   test_non_ascii  s     zFormatTest.test_non_asciic              
   C   s  zt t j}t t jd W n6 t jyT } z| d| W Y d }~n
d }~0 0 zt  }|d }|d }|d }tdd}|r| || | |	|dd td	d}|r| || | || | |	|dd
| d  W t t j| nt t j| 0 d S )N zCannot set locale: {}thousands_sepdecimal_pointgroupingi[nZ	123456789g     J@Z12345)
locale	setlocaleLC_ALLErrorZskipTestr	   
localeconvZassertInr`   replace)r>   oldlocerrrl   sepZpointre   textr   r   r   test_locale  s(    &

zFormatTest.test_localec                 C   s   d}|  d| | |  d| | |  d| | |  d| | |  d| | |  d|| |  d|| |  d	|| |  d
|| |  d|| |  d|| |  |d | |  | | d S )NZabcdez%sz%.5sz%.10sz%1sz%5sz{0}z{0:s}z{0:.5s}z{0:.10s}z{0:1s}z{0:5s}r   )ZassertIsr	   )r>   rq   r   r   r   test_optimisations  s    zFormatTest.test_optimisationsc                 C   s   d}|  t|dd |  t|dd | t$}t|dtjd   W d    n1 s\0    Y  t|}|  t|dd |  t|dd	 | t$}t|dtjd   W d    n1 s0    Y  d S )
N333333?z.0fr(   z.3fz1.200.%sfr'   z1+0jz1.200+0.000j)r`   r	   assertRaisesr<   r9   r:   complex)r>   fcmcr   r   r   test_precision  s    2zFormatTest.test_precisionc                 C   s   ddl m} d}| t"}t|d|d   W d    n1 sB0    Y  t|}| t"}t|d|d   W d    n1 s0    Y  d S )Nr   )INT_MAXrt   ru   r'   )Z	_testcapir|   rv   r<   r	   rw   )r>   r|   rx   ry   rz   r   r   r   test_precision_c_limits  s    0z"FormatTest.test_precision_c_limitsc                 C   sl   |  dd d |  dd d |  tddd |  tddd |  tdd	d
 |  tddd d S )Nz%.3gg     @z1.5e+03z%#.3gz1.50e+03z.3gz#.3gg   @ugAz.6gz1.23e+07z#.6gz1.23000e+07)r`   r	   rJ   r   r   r   #test_g_format_has_no_trailing_zeros  s    z.FormatTest.test_g_format_has_no_trailing_zerosc                 C   sD   t d}| t| dd W d    n1 s60    Y  d S )NzCannot specify ',' with ','.z{:,,}r'   reescapeZassertRaisesRegexr<   r	   r>   Z	error_msgr   r   r   (test_with_two_commas_in_format_specifier  s    
z3FormatTest.test_with_two_commas_in_format_specifierc                 C   sD   t d}| t| dd W d    n1 s60    Y  d S )NzCannot specify '_' with '_'.z{:__}r'   r   r   r   r   r   ,test_with_two_underscore_in_format_specifier  s    
z7FormatTest.test_with_two_underscore_in_format_specifierc                 C   sD   t d}| t| dd W d    n1 s60    Y  d S )N Cannot specify both ',' and '_'.z{:,_}r'   r   r   r   r   r   8test_with_a_commas_and_an_underscore_in_format_specifier   s    
zCFormatTest.test_with_a_commas_and_an_underscore_in_format_specifierc                 C   sD   t d}| t| dd W d    n1 s60    Y  d S )Nr   z{:_,}r'   r   r   r   r   r   7test_with_an_underscore_and_a_comma_in_format_specifier  s    
zBFormatTest.test_with_an_underscore_and_a_comma_in_format_specifierN)rR   rS   rT   r@   rK   r\   r]   ra   rr   supportZcpython_onlyrs   r{   r}   r~   r   r   r   r   r   r   r   r   r%   `   s"    =!J

r%   __main__)NNF)NNF)Ztest.supportr   r   rh   r9   r   r   ZunittestZMAX_Py_ssize_tr:   r   r   r#   r$   ZTestCaser%   rR   mainr   r   r   r   <module>   s    
#
   -