a
     Rîh·Œ  ã                   @   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d dlm	Z	 d dl
mZ ejdkZdZdZefdd	„Zd
d„ Zdd„ ZG dd„ dejƒZG dd„ dejƒZedkr¶e ¡  dS )é    )ÚabcN)Úsupport)Úassert_python_okÚbig)ÚbÚBÚhÚHÚiÚIÚlÚLÚqÚQÚnÚN)Ú ú@ú=ú<ú>ú!c                 c   s4   t D ]*}| D ] }|dvr"|dv r"q||fV  qqd S )N©r   r   )r   r   )Úinteger_codes)Ú
byteordersÚcodeÚ	byteorder© r   ú8/opt/python-3.9.24/usr/lib/python3.9/test/test_struct.pyÚiter_integer_formats   s
    r   c                 C   s   | d d d… S )Néÿÿÿÿr   )Úsr   r   r   Ústring_reverse   s    r"   c                 C   s   t r| S t| ƒS d S ©N)ÚISBIGENDIANr"   )Úvaluer   r   r   Úbigendian_to_native   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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ejd'd(„ ƒZd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7S )8Ú
StructTestc                 C   s    |   t dd¡d dkt¡ d S )Nz=ié   r   )ÚassertEqualÚstructÚpackr$   ©Úselfr   r   r   Útest_isbigendian"   s    zStructTest.test_isbigendianc                 C   s  |   tjtjd¡ t d¡}|  |d t d¡¡ d}d}t |¡}t |¡}|  |d |¡ |   tjtjdd¡ |   tjtjdddd¡ |   ttjftjdd¡ |   ttjftjdd¡ |   tjtjd	d
¡ t ddd¡}|   tjtjd|¡ |   tjtjd|¡ d S )NÚZr
   é   Ziiizcbxxxxxxhhhhiillffd?z3c3b18x12h6i6l6f3d3?ZfooÚPÚds   flapÚiir(   é   )ÚassertRaisesr*   ÚerrorÚcalcsizer)   r+   Ú	TypeErrorÚunpack)r-   ZszÚfmtZfmt3Zsz3r!   r   r   r   Útest_consistence%   s     


zStructTest.test_consistencec                 C   sö   d}d}d}d}d}d}d}d}dD ]Ì}	d	D ]Â}
|	|
 }
t  |
||||||||¡	}t  |
|¡\}}}}}}}}|  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  td
| ƒtd
| ƒ¡ |  td
| ƒtd
| ƒ¡ |  ||¡ q,q$d S )Nó   ar(   éÿ   iÿÿ  i   goƒÀÊ!	@T)r   r   r   r   r   r   )z	xcbhilfd?z	xcBHILfd?éd   )r*   r+   r9   r)   Úint)r-   Úcr   r   r
   r   Úfr2   ÚtÚprefixÚformatr!   ZcpZbpZhpÚipZlpÚfpZdpÚtpr   r   r   Útest_transitiveness:   s*    zStructTest.test_transitivenessc              &   C   sú   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ddd d!d"g d#d#d$fd%g#}|D ]œ\}}}}}d&| |fd'| |fd(| |fd)| t r’|p”|ffD ]X\}}t ||¡}	|  |	|¡ |  t |¡t|	ƒ¡ t ||	¡d* }
|
|krš|  |¡ qšqXd S )+N)r@   r<   r<   r<   r   )Zxcr<   ó    arI   r   )Zcxr<   ó   a rJ   r   )r!   r<   r<   r<   r   )Ú0só
   helloworldó    rM   r(   )Z1srL   ó   hrN   r(   )Z9srL   ó	   helloworlrO   r(   )Z10srL   rL   rL   r   )Z11srL   ó   helloworld rP   r(   )Z20srL   ó   helloworld          rQ   r(   )r   é   ó   rS   r   )r   iùÿÿÿó   ùrT   r   )r   rR   rS   rS   r   )r   éù   rT   rT   r   )r   é¼  ó   ¼ó   ¼r   )r   iDýÿÿó   ýDó   Dýr   )r	   rV   rW   rX   r   )r	   iDý  rY   rZ   r   )r
   é€,ó   ,€ó   €,r   )r
   é€âÓûó   ûÓâ€ó   €âÓûr   )r   r[   r\   r]   r   )r   ì   €b§w r_   r`   r   )r   r[   r\   r]   r   )r   r^   r_   r`   r   )r   r[   r\   r]   r   )r   ra   r_   r`   r   )rA   ç       @s   @   s      @r   )r2   rb   s   @       s          @r   )rA   ç       Às   À   s      Àr   )r2   rc   s   À       s          Àr   )ú?r   ó    re   r   )rd   r0   ó   rf   r(   )rd   Trf   rf   r   rd   re   r(   )rd   )r(   rf   rf   r(   r   r   r   r   r   )r$   r*   r+   r)   r7   Úlenr9   Ú
assertTrue)r-   Ztestsr:   Úargr   ZlilZasyZxfmtÚexpÚresZrevr   r   r   Útest_new_featuresR   s\    Û(ÿzStructTest.test_new_featuresc           
      C   sZ  dddddddddddœ
}t dƒD ]*\}}|| }t |¡}|  ||| ¡ q"d}|D ]>}dD ]4}t ||d	  ¡}t ||d  ¡}	|  ||	¡ q^qV|  t d
¡d¡ |  dt d¡¡ |  dt d¡¡ |  t d¡t d¡¡ |  t d¡t d¡¡ |  dt d¡¡ |  t d¡t d¡¡ |  t d¡t d¡¡ |  t d¡t d¡¡ d S )Nr(   r4   é   é   )
r   r   r   r	   r
   r   r   r   r   r   ©r   r   r   r   )ZbBZhHZiIZlLÚnNZqQr   r   r   r   r   r
   r   r   r1   )r   r*   r7   r)   ZassertLessEqualÚassertGreaterEqual)
r-   Zexpected_sizer   r   rD   ÚsizeZnative_pairsZformat_pairZsigned_sizeZunsigned_sizer   r   r   Útest_calcsize‡   s2    û	
zStructTest.test_calcsizec                    sN   dd l ‰G ‡ ‡‡fdd„dtjƒ‰ tƒ D ] \}}|| ‰ˆ ˆƒ}| ¡  q(d S )Nr   c                       s@   e Zd Z‡‡ fdd„Zejej”jfdd„Z‡fdd„Z	‡  Z
S )z+StructTest.test_integers.<locals>.IntTesterc                    sÚ   t ˆ | ƒjdd || _|d | _|d d… | _| jtvrHtd| j ƒ‚t |¡| _	| j	d | _
| jtdƒv rœd| _d| j
d	   | _d| j
d	  d	 | _n:| jtd
ƒv rÈd| _d| _d| j
 d	 | _ntd| j ƒ‚d S )NÚtest_one)Z
methodNamer    z"unrecognized packing byteorder: %srn   ZbhilqnTr4   r(   ZBHILQNFr   zunrecognized format code: %s)ÚsuperÚ__init__rD   r   r   r   Ú
ValueErrorr*   r7   ÚbytesizeÚbitsizeÚtupleÚsignedÚ	min_valueÚ	max_value)r-   rD   )Ú	IntTesterÚ	__class__r   r   rv   ®   s*    

ÿÿz4StructTest.test_integers.<locals>.IntTester.__init__c           	      S   s.  | j }| j|  kr | jkrn nî|}| jrD|dk rD|d| j> 7 }|  |d¡ d| }t|ƒd@ rld| }| d¡}||ƒ}d| jt|ƒ  | }| j	dks¬| j	dv r´t
s´t|ƒ}|  t|ƒ| j¡ |||ƒ}|  ||¡ |||ƒd }|  ||¡ |  tjtf||d	| ¡ n|  tttjf|||¡ d S )
Nr   r(   z%xÚ0Úasciire   r   )r   r   r   rf   )rD   r|   r}   r{   ry   rq   rg   Úencoderx   r   r$   r"   r)   r5   r*   r6   r8   ÚOverflowErrorrw   )	r-   Úxr+   r9   Ú	unhexlifyrD   ÚexpectedÚgotZ	retrievedr   r   r   rt   Ä   s>    
ÿ
ÿÿ
ÿÿz4StructTest.test_integers.<locals>.IntTester.test_onec                    s  ddl m} g }t| jd ƒD ]}| d|> ¡ qt| jƒD ]2}d}t| jƒD ]}|d> |dƒB }qN| |¡ q<| ddtjd	 g¡ |D ]0}| |fD ] }d
D ]}|| }	|  	|	¡ q q˜qŠG dd„ dƒ}
G dd„ dt
ƒ}G dd„ dt
ƒ}|  ttjftj| jd¡ |  ttjftj| j|¡ |  ttjftj| jd¡ |  ttjftj| j|
ƒ ¡ |  ttjftj| j|ƒ ¡ |dƒ|dƒ|dƒ|dƒ|dƒ|dƒfD ].}zt ˆ |¡ W n   |  d¡ Y n0 q˜|dƒ|dƒ|d ƒ|ddiƒ|g d¢ƒfD ] }|  ttjftj| j|¡ qòd S )Nr   )Ú	randranger0   r(   rn   é   i,  i`®
 rm   )r    r   r(   c                   @   s   e Zd Zdd„ ZdS )zAStructTest.test_integers.<locals>.IntTester.run.<locals>.NotAnIntc                 S   s   dS ©Né*   r   r,   r   r   r   Ú__int__  s    zIStructTest.test_integers.<locals>.IntTester.run.<locals>.NotAnInt.__int__N)Ú__name__Ú
__module__Ú__qualname__rŒ   r   r   r   r   ÚNotAnInt  s   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )zBStructTest.test_integers.<locals>.IntTester.run.<locals>.Indexablec                 S   s
   || _ d S r#   ©Ú_value)r-   r%   r   r   r   rv     s    zKStructTest.test_integers.<locals>.IntTester.run.<locals>.Indexable.__init__c                 S   s   | j S r#   r‘   r,   r   r   r   Ú	__index__  s    zLStructTest.test_integers.<locals>.IntTester.run.<locals>.Indexable.__index__N)r   rŽ   r   rv   r“   r   r   r   r   Ú	Indexable  s   r”   c                   @   s   e Zd Zdd„ Zdd„ ZdS )zAStructTest.test_integers.<locals>.IntTester.run.<locals>.BadIndexc                 S   s   t ‚d S r#   )r8   r,   r   r   r   r“     s    zKStructTest.test_integers.<locals>.IntTester.run.<locals>.BadIndex.__index__c                 S   s   dS rŠ   r   r,   r   r   r   rŒ     s    zIStructTest.test_integers.<locals>.IntTester.run.<locals>.BadIndex.__int__N)r   rŽ   r   r“   rŒ   r   r   r   r   ÚBadIndex  s   r•   za stringy      @      E@é
   é   r‹   r>   é   z:integer code pack failed on object with '__index__' methodr<   r   Úa)r(   r4   r0   )Úrandomrˆ   Úrangery   Úappendrx   ÚextendÚsysÚmaxsizert   Úobjectr5   r8   r*   r6   r+   rD   Úfail)r-   rˆ   Úvaluesrj   r
   ÚvalÚjÚbaseZincrr„   r   r”   r•   Úobj)rD   r   r   Úrunê   sh    	þþþþþÿÿþz/StructTest.test_integers.<locals>.IntTester.run)r   rŽ   r   rv   r*   r+   r9   r…   rt   r§   Ú__classcell__r   ©r~   ÚbinasciirD   )r   r   r~   ­   s   þ
&r~   )rª   ÚunittestÚTestCaser   r§   )r-   r   r   rB   r   r©   r   Útest_integers©   s     zStructTest.test_integersc                    sT   ‡ fdd„}dD ]>}dD ]4}|| }|t j|ƒ |t j|dƒ |t j|dƒ qqd S )Nc                    sP   ˆ   tj¡}| |i |¤Ž W d   ƒ n1 s00    Y  ˆ  dt|jƒ¡ d S )Nzbad char in struct format)r5   r*   r6   ÚassertInÚstrÚ	exception)ÚfuncÚargsÚkwargsÚcmr,   r   r   ÚassertStructErrorE  s    ,z2StructTest.test_nN_code.<locals>.assertStructErrorrp   ro   r   rM   )r*   r7   r+   r9   )r-   rµ   r   r   rD   r   r,   r   Útest_nN_codeC  s    zStructTest.test_nN_codec                 C   sH   dD ]>\}}}}t  ||¡}|  ||¡ t  ||¡\}|  ||¡ qd S )N))Úpó   abcre   rM   )Z1pr¸   re   rM   )Z2pr¸   s   ar<   )Z3pr¸   s   abs   ab)Z4pr¸   s   abcr¸   )Z5pr¸   s   abc r¸   )Z6pr¸   s   abc  r¸   )Z1000psè  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsè  ÿxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsÿ   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r*   r+   r)   r9   )r-   r   Úinputr†   Zexpectedbackr‡   r   r   r   Útest_p_codeP  s
    	zStructTest.test_p_codec                 C   sô   t ddƒD ]Š}d}||d  |kr,|d }q|| }t d|¡}t d|¡d }|  ||¡ t d|¡}|  |t|ƒ¡ t d|¡d }|  ||¡ q
d}t |d	¡}t d|¡}t d|¡d }|  ||¡ d
}t |d¡}|  t	tjd|¡ d S )Nr(   é!   g      à?rb   z<fr   z>fiÿÿÿ éh   iÿÿÿég   )
r›   r*   r+   r9   r)   r"   ÚmathÚldexpr5   rƒ   )r-   r¥   ZdeltaZsmallerÚpackedZunpackedZ	bigpackedr   r   r   r   Útest_705836`  s(    
zStructTest.test_705836c                 C   sl   t ƒ D ]8\}}|| }|  tjtj|d¡ |  tjtj|d¡ q|  tjtjdd¡ |  tjtjdd¡ d S )Nç      ð?g      ø?r1   )r   r5   r*   r6   r+   )r-   r   r   rD   r   r   r   Útest_1530559  s    zStructTest.test_1530559c              	   C   s’  d}d}t  |¡}ttfD ]¢}||ƒ}|  | |¡d¡ |  | |d¡d¡ |  | |d¡d¡ tdƒD ]&}|  | ||¡|||d … f¡ qhtdt|ƒd	 ƒD ]}|  t j	|j||¡ q¢qttfD ]°}||ƒ}|  t  ||¡d¡ |  t  ||d¡d¡ |  t  ||d¡d¡ tdƒD ]*}|  t  |||¡|||d … f¡ qtdt|ƒd	 ƒD ]}|  t j	t j|||¡ qXqÆ|  |j|dd
d¡ d S )Ns	   abcd01234Z4s)s   abcdr4   )s   cd01rm   )s   0123é   r(   )ÚbufferÚoffset)
r*   ÚStructÚbytesÚ	bytearrayr)   Úunpack_fromr›   rg   r5   r6   )r-   Útest_stringr:   r!   ÚclsÚdatar
   r   r   r   Útest_unpack_from‰  s0    
$(ÿzStructTest.test_unpack_fromc                 C   sì   d}t   dd¡}d}t |¡}| |d|¡ | ¡ d t|ƒ… }|  ||¡ | |d|¡ | ¡ d t|ƒd … }|  ||d d… | ¡ t   dd¡}|  ttj	f|j|d|¡ |  ttj	f|j|d|¡ |}|  t
tj	ftjd	|d ¡ d S )
Nó   Reykjavik rocks, eow!r   ód                                                                                                       Ú21sr   r–   ó
             r4   rM   )Úarrayr*   rÇ   Ú	pack_intoÚtobytesrg   r)   r5   rw   r6   r8   )r-   rË   Úwritable_bufr:   r!   Úfrom_bufÚ	small_bufZsbr   r   r   Útest_pack_into¤  s*    
ÿÿÿzStructTest.test_pack_intoc                    sÈ   d}t   dd¡}d‰ ‡ fdd„}||d|ƒ | ¡ d t|ƒ… }|  ||¡ ||d|ƒ | ¡ d t|ƒd … }|  ||d d… | ¡ t   dd	¡}|  ttjf||d|¡ |  ttjf||d
|¡ d S )NrÏ   r   rÐ   rÑ   c                     s   t jˆ g| ¢R Ž S r#   )r*   rÔ   )r²   ©r:   r   r   Ú<lambda>Ä  rM   z.StructTest.test_pack_into_fn.<locals>.<lambda>r   r–   rÒ   r4   )rÓ   rÕ   rg   r)   r5   rw   r*   r6   )r-   rË   rÖ   rÔ   r×   rØ   r   rÚ   r   Útest_pack_into_fnÀ  s"    ÿÿzStructTest.test_pack_into_fnc                 C   s@   t   dd¡}tdƒ}||fD ]}t d|¡\}|  |d¡ qd S )Nr   s   4Vxz>IixV4)rÓ   Ú
memoryviewr*   r9   r)   )r-   Zdata1Zdata2rÍ   r%   r   r   r   Útest_unpack_with_buffer×  s
    z"StructTest.test_unpack_with_bufferc              	   C   sž  G dd„ dt ƒ}tdƒd D ]X}dg g ddf}dgd	d
dddf}|dt|ƒ  }tj|g|¢R Ž }t ||¡}|dt|ƒ  }tj|g|¢R Ž }	t ||	¡}
|  t|ƒt|
ƒ¡ |  t|ƒt|ƒ¡ |D ]}|  |¡ qÊ|
D ]}|  |¡ qÞt |d d¡}|  t|ƒt 	|d ¡¡ t|ƒdkr8| j|d| d zt |d |ƒ ¡ W n t
yb   Y q0 |  d|d  ¡ qdD ]}|  t d|¡d ¡ q|d S )Nc                   @   s   e Zd Zdd„ ZdS )z+StructTest.test_bool.<locals>.ExplodingBoolc                 S   s   t ‚d S r#   )ÚOSErrorr,   r   r   r   Ú__bool__á  s    z4StructTest.test_bool.<locals>.ExplodingBool.__bool__N)r   rŽ   r   rà   r   r   r   r   ÚExplodingBoolà  s   rá   z<>!=)r   r   r   r   r(   Útesté   r    l        g  àÿÿÿßArd   z encoded bool is not one byte: %r)Úmsgz2Expected OSError: struct.pack(%r, ExplodingBool()))rf   ó   ó   ÿó   ó   ðz>?)r    rz   rg   r*   r+   r9   r)   ZassertFalserh   r7   rß   r¡   )r-   rá   rC   ZfalseÚtrueZfalseFormatZpackedFalseZunpackedFalseZ
trueFormatZ
packedTrueZunpackedTruerB   rÀ   r@   r   r   r   Ú	test_boolß  s>    ÿÿzStructTest.test_boolc                 C   sP   d  tjd ¡}|  tjtj|¡ d  tjd tjd ¡}|  tjtj|¡ d S )Nz{}br(   z{}b{}Hr4   )rD   rž   rŸ   r5   r*   r6   r7   )r-   Z	hugecountZ
hugecount2r   r   r   Útest_count_overflow
  s    zStructTest.test_count_overflowc                 C   s  t   dd¡}|  tjtjd¡ |  tjtjdd¡ |  tjtjd|d¡ |  tjtjd|d¡ |  tjtjdd¡ |  tjtjdd¡ |  tjtjd|dd¡ |  tjtjd|d¡ |  tjtjd	d
¡ |  tjtjd	d¡ |  tjtjd	|dd
¡ |  tjtjd	|d¡ d S )Nr   rÐ   Z12345rM   r   Zc12345r„   ó   xZ14s42zspam and eggss   spam and eggs)rÓ   r5   r*   r6   r+   r9   rÔ   rÊ   )r-   Ústorer   r   r   Útest_trailing_counter  s*    ÿÿÿÿz StructTest.test_trailing_counterc                 C   s   t  d¡}| d¡ d S )Nr
   r3   )r*   rÇ   rv   ©r-   r!   r   r   r   Útest_Struct_reinitialization*  s    
z'StructTest.test_Struct_reinitializationc                 C   s8   t  d¡}|t d¡|d  7 }t  | t |¡|¡ d S )NZ2n3PZP3n0Pr(   )r   Zcalcobjsizer*   r7   Úcheck_sizeofrÇ   )r-   Z
format_strZnumber_of_codesZ	totalsizer   r   r   rñ   1  s    
zStructTest.check_sizeofc                 C   s†   t D ]}|  |d¡ q|  dd¡ |  dd¡ |  dd¡ |  dd	¡ |  d
d¡ |  dd¡ |  dd¡ |  dd¡ |  dd	¡ d S )Nr(   Z	BHILfdspPé	   AÒ  BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBiÒ  Úfdr4   Zxxxxxxxxxxxxxxr   Z100HZ187sZ20prK   Z0c)r   rñ   )r-   r   r   r   r   Útest__sizeof__8  s    zStructTest.test__sizeof__c                 C   sŽ   d}|   tj|¡$ t dtdƒdd¡ W d   ƒ n1 s<0    Y  d}|   tj|¡" t dtdƒd¡ W d   ƒ n1 s€0    Y  d S )Nzkpack_into requires a buffer of at least 6 bytes for packing 1 bytes at offset 5 \(actual buffer size is 1\)r   r(   rã   zounpack_from requires a buffer of at least 6 bytes for unpacking 1 bytes at offset 5 \(actual buffer size is 1\))ÚassertRaisesRegexr*   r6   rÔ   rÉ   rÊ   ©r-   Zregex1Zregex2r   r   r   Útest_boundary_error_messageF  s    ÿ2ÿz&StructTest.test_boundary_error_messagec                 C   s   t dƒ}|  tjd¡  t d|dd¡ W d   ƒ n1 s<0    Y  |  tjd¡  t d|dd¡ W d   ƒ n1 sz0    Y  |  tjd	¡ t d|d¡ W d   ƒ n1 s¶0    Y  |  tjd¡ t d|d¡ W d   ƒ n1 sò0    Y  d S )
Nr–   z%no space to pack 4 bytes at offset -2ú<Iéþÿÿÿé{   z*offset -11 out of range for 10-byte bufferz<Biõÿÿÿz.not enough data to unpack 4 bytes at offset -2)rÉ   rõ   r*   r6   rÔ   rÊ   )r-   Z	byte_listr   r   r   Ú0test_boundary_error_message_with_negative_offsetW  s*    þ.þ.þ,þz;StructTest.test_boundary_error_message_with_negative_offsetc                 C   sÒ   dt tjd ƒ d t tjƒ d }|  tj|¡& t dtdƒtjd¡ W d   ƒ n1 s^0    Y  dt tjd ƒ d	 t tjƒ d }|  tj|¡$ t dtdƒtj¡ W d   ƒ n1 sÄ0    Y  d S )
Nz(pack_into requires a buffer of at least rm   z% bytes for packing 4 bytes at offset z \(actual buffer size is 10\)rø   r–   r(   z*unpack_from requires a buffer of at least z' bytes for unpacking 4 bytes at offset )	r¯   rž   rŸ   rõ   r*   r6   rÔ   rÉ   rÊ   rö   r   r   r   Ú-test_boundary_error_message_with_large_offsetm  s(    ÿÿþÿ4ÿÿþÿz8StructTest.test_boundary_error_message_with_large_offsetc                 C   sN   |   t¡ t dd¡ W d   ƒ n1 s,0    Y  |  t dd¡d¡ d S )Nr   r   r<   )éa   )r5   r8   r*   r9   r)   r,   r   r   r   Útest_issue29802  s    *zStructTest.test_issue29802c                 C   s<   t  d¡}|  |jd¡ t  |j ¡ ¡}|  |j|j¡ d S )Nz=i2H)r*   rÇ   r)   rD   r‚   )r-   r!   Ús2r   r   r   Útest_format_attrˆ  s    
zStructTest.test_format_attrc                 C   sL   d}t d|ƒ\}}}|  |d¡ |  | ¡ d¡ |  d|¡ |  d|¡ d S )Nzùif 1:
            import struct

            class C:
                def __init__(self):
                    self.pack = struct.pack
                def __del__(self):
                    self.pack('I', -42)

            struct.x = C()
            z-cr   rM   s   Exception ignored in:s	   C.__del__)r   r)   Úrstripr®   )r-   r   ÚrcÚstdoutÚstderrr   r   r   Ú)test_struct_cleans_up_at_runtime_shutdown  s    z4StructTest.test_struct_cleans_up_at_runtime_shutdownc              	   C   sF   dD ]<}|   tjd¡ t |¡ W d   ƒ q1 s60    Y  qd S )N)ú z2 ire   zembedded null character)rõ   r*   r6   r7   rï   r   r   r   Útest_issue35714¢  s
    ÿzStructTest.test_issue35714N) r   rŽ   r   r.   r;   rH   rl   rs   r­   r¶   rº   rÁ   rÃ   rÎ   rÙ   rÜ   rÞ   rê   rë   rî   rð   rñ   r   Zcpython_onlyrô   r÷   rû   rü   rþ   r   r  r  r   r   r   r   r'   !   s:   5" !+
	r'   c                   @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )ÚUnpackIteratorTestzD
    Tests for iterative unpacking (struct.Struct.iter_unpack).
    c                    s"  ‡ fdd„}t  d¡}| d¡}||ƒ | d¡}||ƒ ˆ  t j¡ | d¡ W d   ƒ n1 sf0    Y  ˆ  t j¡ | d¡ W d   ƒ n1 sœ0    Y  t  d¡}ˆ  t j¡ | d¡ W d   ƒ n1 sÜ0    Y  ˆ  t j¡ | d	¡ W d   ƒ n1 s0    Y  d S )
Nc                    s    ˆ   | tj¡ ˆ   | tj¡ d S r#   )ZassertIsInstancer   ÚIteratorÚIterable)Úitr,   r   r   Ú_check_iterator°  s    z:UnpackIteratorTest.test_construct.<locals>._check_iteratorú>ibcprM   s   1234567s   123456s   12345678r   s   12)r*   rÇ   Úiter_unpackr5   r6   )r-   r  r!   r  r   r,   r   Útest_construct¯  s    


((
(z!UnpackIteratorTest.test_constructc                 C   s$   t t d¡ d¡ƒ}|  t|¡ d S )Nr  rM   )Útyper*   rÇ   r  r5   r8   )r-   Ziter_unpack_typer   r   r   Útest_uninstantiableÄ  s    z&UnpackIteratorTest.test_uninstantiablec                 C   sr   t  d¡}ttddƒƒ}| |¡}|  t|ƒd¡ |  t|ƒd¡ |  t|ƒd¡ |  tt|¡ |  tt|¡ d S )Nú>IBr(   é   ©irã   ©i	r–   )ié   )	r*   rÇ   rÈ   r›   r  r)   Únextr5   ÚStopIteration©r-   r!   r   r  r   r   r   Útest_iterateÈ  s    

zUnpackIteratorTest.test_iteratec                 C   sf   t  d¡}ttddƒƒ}| t|ƒ¡}|  t|ƒd¡ |  t|ƒd¡ |  t	t|¡ |  t	t|¡ d S ©Nr  r(   é   r  r  )
r*   rÇ   rÈ   r›   r  rÝ   r)   r  r5   r  r  r   r   r   Útest_arbitrary_bufferÒ  s    
z(UnpackIteratorTest.test_arbitrary_bufferc                 C   s¢   t j}t d¡}ttddƒƒ}| |¡}|  ||ƒd¡ t|ƒ |  ||ƒd¡ t|ƒ |  ||ƒd¡ t|ƒ |  ||ƒd¡ |  	t
t|¡ |  ||ƒd¡ d S )Nr  r(   r  r0   r4   r   )ÚoperatorÚlength_hintr*   rÇ   rÈ   r›   r  r)   r  r5   r  )r-   Zlhr!   r   r  r   r   r   Útest_length_hintÛ  s    

z#UnpackIteratorTest.test_length_hintc                 C   sV   t  dttddƒƒ¡}|  t|ƒd¡ |  t|ƒd¡ |  tt|¡ |  tt|¡ d S r  )r*   r  rÈ   r›   r)   r  r5   r  )r-   r  r   r   r   Útest_module_funcê  s
    z#UnpackIteratorTest.test_module_funcc                 C   s(  ddddddddt d	ƒfd
t dƒfdg
}|D ]Ò\}}|d d d… }|  |t d|¡d ¡ |  |t d|¡¡ |  |t d|¡d ¡ |  |t d|¡¡ tjdkrÒ|  |t d|¡d ¡ |  |t d|¡¡ q,|  |t d|¡d ¡ |  |t d|¡¡ q,g d¢}|D ]L\}}|  t 	t d|¡d ¡¡ |  t 	t d|d d d… ¡d ¡¡ qt dtj
¡}|  |d d@ d¡ t dtj
 ¡}|  |d d@ d¡ g d¢}	|	D ] \}}}|  |t ||¡¡ q¬g d¢}
|
D ]\}}|  ttj||¡ qÚdg}|D ] \}}}|  |t ||¡¡ qd S )N)s    <rÂ   )s    Àrc   )s   ÿ{g     üï@)s    ç      ?)s    g      p>)ó     g        )s    €g       €s    |z+infs    üz-inf)s   U5g     TÕ?r    ú<er   ú>eÚlittleÚe))r$  s   ü)r$  s    þ)r$  s   ÿÿ)r$  s   |)r$  s    ~)r$  s   ÿr(   é~   ))r%  s    g     `>)r%  r#  g      `>)r%  r#  g      P>)r%  ó   ÿg     ø?)r%  r)  güÿÿÿÿû?)r%  ó    g     ü?)r%  r*  r"  )r%  s   <g    ð?)r%  ó   < g     ð?)r%  r+  g     ð?)r%  ó   {ÿiàÿ  )r%  r,  iïÿ  )r%  s   €g     `¾)r%  ó   € g      `¾)r%  r-  g      P¾)r%  s   ¼g    ð¿)r%  ó   ¼ g     ð¿)r%  r.  g     ð¿)r%  s   ûÿi ÿÿ))r%  ç     þï@)r%  ç      ð@)r%  çœu ˆ<ä7~)r%  ç     þïÀ)r%  ç      ðÀ)r%  çœu ˆ<ä7þ)r$  r/  )r$  r0  )r$  r1  )r$  r2  )r$  r3  )r$  r4  )r%  s   gÿg  ÿÿÿýŸ@)Úfloatr)   r*   r9   r+   rž   r   rh   r¾   ÚisnanÚnanr5   rƒ   )r-   Z&format_bits_float__cleanRoundtrip_listZle_bitsrA   Zbe_bitsZformat_bits__nan_listZ
formatcodeÚbitsrÀ   Z format_bits_float__rounding_listZ%format_bits_float__roundingError_listZ+format_bits_float__doubleRoundingError_listr   r   r   Útest_half_floatò  sP    

ö
	*ÿz"UnpackIteratorTest.test_half_floatN)r   rŽ   r   Ú__doc__r  r  r  r  r   r!  r9  r   r   r   r   r  ª  s   
	r  Ú__main__)Úcollectionsr   rÓ   r¾   r  r«   r*   rž   râ   r   Ztest.support.script_helperr   r   r$   r   r   r   r"   r&   r¬   r'   r  r   Úmainr   r   r   r   Ú<module>   s0   
      2