o
    ±ó®g·Œ  ã                   @   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 dS )é    )ÚabcN)Úsupport)Úassert_python_okÚbig)ÚbÚBÚhÚHÚiÚIÚlÚLÚqÚQÚnÚN)Ú ú@ú=ú<ú>ú!c                 c   s6    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   úF/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/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 ©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 ]f}	d	D ]a}
|	|
 }
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hpZipZlpÚfpZdpÚtpr   r   r   Útest_transitiveness:   s.   õÿzStructTest.test_transitivenessc                 C   s@  g 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%‘}|D ]N\}}}}}d&| |fd'| |fd(| |fd)| t rl|pm|ffD ],\}}t ||¡}	|  |	|¡ |  t |¡t|	ƒ¡ t ||	¡d* }
|
|krœ|  |¡ qpqOd S )+N)r@   r<   r<   r<   r   )Zxcr<   ó    arH   r   )Zcxr<   ó   a rI   r   )r!   r<   r<   r<   r   )Ú0só
   helloworldó    rL   r(   )Z1srK   ó   hrM   r(   )Z9srK   ó	   helloworlrN   r(   )Z10srK   rK   rK   r   )Z11srK   ó   helloworld rO   r(   )Z20srK   ó   helloworld          rP   r(   )r   é   ó   rR   r   )r   iùÿÿÿó   ùrS   r   )r   rQ   rR   rR   r   )r   éù   rS   rS   r   )r   é¼  ó   ¼ó   ¼r   )r   iDýÿÿó   ýDó   Dýr   )r	   rU   rV   rW   r   )r	   iDý  rX   rY   r   )r
   é€,ó   ,€ó   €,r   )r
   é€âÓûó   ûÓâ€ó   €âÓûr   )r   rZ   r[   r\   r   )r   ì   €b§w r^   r_   r   )r   rZ   r[   r\   r   )r   r]   r^   r_   r   )r   rZ   r[   r\   r   )r   r`   r^   r_   r   )rA   ç       @s   @   s      @r   )r2   ra   s   @       s          @r   )rA   ç       Às   À   s      Àr   )r2   rb   s   À       s          Àr   )ú?r   ó    rd   r   )rc   r0   ó   re   r(   )rc   Tre   re   r   rc   rd   r(   )rc   )r(   re   re   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 ]}t ||d	  ¡}t ||d  ¡}	|  ||	¡ q/q+|  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‡   s4   û	
ý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r$td| j ƒ‚t |¡| _	| j	d | _
| jtdƒv rOd| _d| j
d	   | _d| j
d	  d	 | _d S | jtd
ƒv rfd| _d| _d| j
 d	 | _d S td| j ƒ‚)NÚtest_one)Z
methodNamer    z"unrecognized packing byteorder: %srm   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   ru   ®   s*   

ÿÿz4StructTest.test_integers.<locals>.IntTester.__init__c           	      S   s.  | j }| j|  kr| jkr‰n nx|}| jr!|dk r!|d| j> 7 }|  |d¡ d| }t|ƒd@ r5d| }| d¡}||ƒ}d| jt|ƒ  | }| j	dksU| j	dv rYt
sYt|ƒ}|  t|ƒ| j¡ |||ƒ}|  ||¡ |||ƒd }|  ||¡ |  tjtf||d	| ¡ d S |  tttjf|||¡ d S )
Nr   r(   z%xÚ0Úasciird   r   )r   r   r   re   )rD   r{   r|   rz   rx   rp   rf   Úencoderw   r   r$   r"   r)   r5   r*   r6   r8   ÚOverflowErrorrv   )	r-   Úxr+   r9   Ú	unhexlifyrD   ÚexpectedÚgotZ	retrievedr   r   r   rs   Ä   s>   
ÿ
ÿÿ
ÿÿz4StructTest.test_integers.<locals>.IntTester.test_onec                    s  ddl m} g }t| jd ƒD ]	}| d|> ¡ qt| jƒD ]}d}t| jƒD ]
}|d> |dƒB }q'| |¡ q| ddtjd	 g¡ |D ]}| |fD ]}d
D ]}|| }	|  	|	¡ qPqLqEG 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 qÌ   |  d¡ Y qÌ|dƒ|dƒ|d ƒ|ddiƒ|g d¢ƒfD ]}|  ttjftj| j|¡ qöd S )Nr   )Ú	randranger0   r(   rm   é   i,  i`®
 rl   )r    r   r(   c                   @   ó   e Zd Zdd„ ZdS )zAStructTest.test_integers.<locals>.IntTester.run.<locals>.NotAnIntc                 S   ó   dS ©Né*   r   r,   r   r   r   Ú__int__  ó   zIStructTest.test_integers.<locals>.IntTester.run.<locals>.NotAnInt.__int__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   ÚNotAnInt  ó    r’   c                   @   ó   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   ru     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‘   ru   r—   r   r   r   r   Ú	Indexable  ó    r˜   c                   @   r”   )zAStructTest.test_integers.<locals>.IntTester.run.<locals>.BadIndexc                 S   ó   t ‚r#   )r8   r,   r   r   r   r—     rŽ   zKStructTest.test_integers.<locals>.IntTester.run.<locals>.BadIndex.__index__c                 S   rŠ   r‹   r   r,   r   r   r   r     rŽ   zIStructTest.test_integers.<locals>.IntTester.run.<locals>.BadIndex.__int__N)r   r   r‘   r—   r   r   r   r   r   ÚBadIndex  r™   r›   za stringy      @      E@é
   é   rŒ   r>   é   z:integer code pack failed on object with '__index__' methodr<   r   Úa)r(   r4   r0   )Úrandomr‡   Úrangerx   Úappendrw   ÚextendÚsysÚmaxsizers   Úobjectr5   r8   r*   r6   r+   rD   Úfail)r-   r‡   Úvaluesri   r
   ÚvalÚjÚbaseZincrrƒ   r’   r˜   r›   Úobj)rD   r   r   Úrunê   sn   þÿ	þþþþþÿÿþþz/StructTest.test_integers.<locals>.IntTester.run)r   r   r‘   ru   r*   r+   r9   r„   rs   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 ]}|| }|t j|ƒ |t j|dƒ |t j|dƒ qqd S )Nc                    sP   ˆ   tj¡}| |i |¤Ž W d   ƒ n1 sw   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>.assertStructErrorro   rn   r   rL   )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ó   abcrd   rL   )Z1pr¾   rd   rL   )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 ]L}d}||d  |kr|d }||d  |ks|| }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      à?ra   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 ]\}}|| }|  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 ]Q}||ƒ}|  | |¡d¡ |  | |d¡d¡ |  | |d¡d¡ tdƒD ]}|  | ||¡|||d … f¡ q4tdt|ƒd	 ƒD ]}|  t j	|j||¡ qQqttfD ]V}||ƒ}|  t  ||¡d¡ |  t  ||d¡d¡ |  t  ||d¡d¡ tdƒD ]}|  t  |||¡|||d … f¡ qtdt|ƒd	 ƒD ]}|  t j	t j|||¡ q«qc|  |j|dd
d¡ d S )Ns	   abcd01234Z4s)s   abcdr4   )s   cd01rl   )s   0123é   r(   )ÚbufferÚoffset)
r*   ÚStructÚbytesÚ	bytearrayr)   Úunpack_fromr¡   rf   r5   r6   )r-   Útest_stringr:   r!   ÚclsÚdatar
   r   r   r   Útest_unpack_from‰  s4   
$ÿ&ÿÿ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   rL   )Úarrayr*   rÍ   Ú	pack_intoÚtobytesrf   r)   r5   rv   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>Ä  s    z.StructTest.test_pack_into_fn.<locals>.<lambda>r   rœ   rØ   r4   )rÙ   rÛ   rf   r)   r5   rv   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 ]ª}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 ]}|  |¡ qd|
D ]}|  |¡ qnt |d d¡}|  t|ƒt 	|d ¡¡ t|ƒdkrš| j|d| d zt |d |ƒ ¡ W n	 t
y®   Y qw |  d|d  ¡ qdD ]}|  t d|¡d ¡ q»d S )Nc                   @   r‰   )z+StructTest.test_bool.<locals>.ExplodingBoolc                 S   rš   r#   )ÚOSErrorr,   r   r   r   Ú__bool__á  rŽ   z4StructTest.test_bool.<locals>.ExplodingBool.__bool__N)r   r   r‘   ræ   r   r   r   r   ÚExplodingBoolà  r“   rç   z<>!=)r   r   r   r   r(   Útesté   r    l        g  àÿÿÿßArc   z encoded bool is not one byte: %r)Úmsgz2Expected OSError: struct.pack(%r, ExplodingBool()))re   ó   ó   ÿó   ó   ðz>?)r¦   ry   rf   r*   r+   r9   r)   ZassertFalserg   r7   rå   r§   )r-   rç   rC   ZfalseÚtrueZfalseFormatZpackedFalseZunpackedFalseZ
trueFormatZ
packedTrueZunpackedTruerB   rÆ   r@   r   r   r   Ú	test_boolß  sB   ÿÿÿÿ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12345rL   r   Zc12345rƒ   ó   xZ14s42zspam and eggss   spam and eggs)rÙ   r5   r*   r6   r+   r9   rÚ   rÐ   )r-   Zstorer   r   r   Útest_trailing_counter  s*   ÿÿÿÿz StructTest.test_trailing_counterc                 C   s   t  d¡}| d¡ d S )Nr
   r3   )r*   rÍ   ru   ©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20prJ   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w   Y  d}|   tj|¡ t dtdƒd¡ W d   ƒ d S 1 sAw   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   ÿÿÿ"ÿz&StructTest.test_boundary_error_messagec                 C   s  t dƒ}|  tjd¡ t d|dd¡ W d   ƒ n1 sw   Y  |  tjd¡ t d|dd¡ W d   ƒ n1 s=w   Y  |  tjd	¡ t d|d¡ W d   ƒ n1 s[w   Y  |  tjd¡ t d|d¡ W d   ƒ d S 1 szw   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  s2   þýþýþýþ"ý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/w   Y  dt tjd ƒ d	 t tjƒ d }|  tj|¡ t dtdƒtj¡ W d   ƒ d S 1 scw   Y  d S )
Nz(pack_into requires a buffer of at least rl   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,   ÿÿþÿÿÿÿþÿ"ÿz8StructTest.test_boundary_error_message_with_large_offsetc                 C   sN   |   t¡ t dd¡ W d   ƒ n1 sw   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   rL   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 sw   Y  qd S )N)ú z2 ird   zembedded null character)rú   r*   r6   r7   rô   r   r   r   Útest_issue35714¢  s   ÿþÿzStructTest.test_issue35714N) r   r   r‘   r.   r;   rG   rk   rr   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 s3w   Y  ˆ  t j¡ | d¡ W d   ƒ n1 sNw   Y  t  d¡}ˆ  t j¡ | d¡ W d   ƒ n1 snw   Y  ˆ  t j¡ | d	¡ W d   ƒ d S 1 sŠw   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ú>ibcprL   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  rL   )Ú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 ]i\}}|d d d… }|  |t d|¡d ¡ |  |t d|¡¡ |  |t d|¡d ¡ |  |t d|¡¡ tjdkri|  |t d|¡d ¡ |  |t d|¡¡ q|  |t d|¡d ¡ |  |t d|¡¡ qg d¢}|D ]%\}}|  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    Àrb   )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*  r0  g     ð?)r*  ó   {ÿiàÿ  )r*  r1  iïÿ  )r*  s   €g     `¾)r*  ó   € g      `¾)r*  r2  g      P¾)r*  s   ¼g    ð¿)r*  ó   ¼ g     ð¿)r*  r3  g     ð¿)r*  s   ûÿi ÿÿ))r*  ç     þï@)r*  ç      ð@)r*  çœu ˆ<ä7~)r*  ç     þïÀ)r*  ç      ðÀ)r*  çœu ˆ<ä7þ)r)  r4  )r)  r5  )r)  r6  )r)  r7  )r)  r8  )r)  r9  )r*  s   gÿg  ÿÿÿýŸ@)Úfloatr)   r*   r9   r+   r¤   r   rg   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ò  sR   

ö
	(ÿÿz"UnpackIteratorTest.test_half_floatN)r   r   r‘   Ú__doc__r  r  r  r"  r%  r&  r>  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>   s4    
      2ÿ