o
    HXî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Zd dl	Z	d dl
m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rke ¡  dS dS )é    )ÚabcN)Úsupport)Úimport_helper)Ú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   ú:/opt/python-3.10.19/usr/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ejd7d8„ ƒZ d9d:„ Z!d;S )<Ú
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,   r:   r*   Úint)r.   Úcr   r	   r   r   Úfr3   ÚtÚprefixÚformatr"   ZcpZbpZhpÚ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)rA   r=   r=   r=   r   )Zxcr=   ó    arJ   r   )Zcxr=   ó   a rK   r   )r"   r=   r=   r=   r   )Ú0só
   helloworldó    rN   r)   )Z1srM   ó   hrO   r)   )Z9srM   ó	   helloworlrP   r)   )Z10srM   rM   rM   r   )Z11srM   ó   helloworld rQ   r)   )Z20srM   ó   helloworld          rR   r)   )r   é   ó   rT   r   )r   iùÿÿÿó   ùrU   r   )r   rS   rT   rT   r   )r   éù   rU   rU   r   )r	   é¼  ó   ¼ó   ¼r   )r	   iDýÿÿó   ýDó   Dýr   )r
   rW   rX   rY   r   )r
   iDý  rZ   r[   r   )r   é€,ó   ,€ó   €,r   )r   é€âÓûó   ûÓâ€ó   €âÓûr   )r   r\   r]   r^   r   )r   ì   €b§w r`   ra   r   )r   r\   r]   r^   r   )r   r_   r`   ra   r   )r   r\   r]   r^   r   )r   rb   r`   ra   r   )rB   ç       @s   @   s      @r   )r3   rc   s   @       s          @r   )rB   ç       Às   À   s      Àr   )r3   rd   s   À       s          Àr   )ú?r   ó    rf   r   )re   r1   ó   rg   r)   )re   Trg   rg   r   re   rf   r)   )re   )r)   rg   rg   r)   r   r   r   r   r   )r%   r+   r,   r*   r8   Úlenr:   Ú
assertTrue)r.   Ztestsr;   Úargr   ZlilZasyZxfmtÚexpÚresZrevr   r   r   Útest_new_featuresU   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)   r5   é   é   )
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   r2   )r    r+   r8   r*   ZassertLessEqualÚassertGreaterEqual)
r.   Zexpected_sizer   r   rE   Ú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: %sro   ZbhilqnTr5   r)   ZBHILQNFr   zunrecognized format code: %s)ÚsuperÚ__init__rE   r   r   r   Ú
ValueErrorr+   r8   ÚbytesizeÚbitsizeÚtupleÚsignedÚ	min_valueÚ	max_value)r.   rE   )Ú	IntTesterÚ	__class__r   r   rw   ±   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Úasciirf   r   )r   r   r   rg   )rE   r}   r~   r|   rz   rr   rh   Úencodery   r   r%   r#   r*   r6   r+   r7   r9   ÚOverflowErrorrx   )	r.   Úxr,   r:   Ú	unhexlifyrE   ÚexpectedÚgotZ	retrievedr   r   r   ru   Ç   s8   
ÿ

ÿÿ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   )Ú	randranger1   r)   ro   é   i,  i`®
 rn   )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   rw     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“   rw   r™   r   r   r   r   Ú	Indexable  ó    rš   c                   @   r–   )zAStructTest.test_integers.<locals>.IntTester.run.<locals>.BadIndexc                 S   ó   t ‚r$   )r9   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)   r5   r1   )Úrandomr‰   Úrangerz   Úappendry   ÚextendÚsysÚmaxsizeru   Úobjectr6   r9   r+   r7   r,   rE   Úfail)r.   r‰   Úvaluesrk   r   ÚvalÚjÚbaseZincrr…   r”   rš   r   Úobj)rE   r   r   Úruní   sn   þÿ	þþþþþÿÿþþz/StructTest.test_integers.<locals>.IntTester.run)r‘   r’   r“   rw   r+   r,   r:   r†   ru   r¯   Ú__classcell__r   ©r   ÚbinasciirE   )r€   r   r   °   s    
þ&r   )r²   ÚunittestÚTestCaser    r¯   )r.   r   r   rC   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)r6   r+   r7   ÚassertInÚstrÚ	exception)ÚfuncÚargsÚkwargsÚcmr-   r   r   ÚassertStructErrorH  s   ÿz2StructTest.test_nN_code.<locals>.assertStructErrorrq   rp   r   rN   )r+   r8   r,   r:   )r.   r½   r   r   rE   r   r-   r   Útest_nN_codeF  s   üÿzStructTest.test_nN_codec                 C   sH   dD ]\}}}}t  ||¡}|  ||¡ t  ||¡\}|  ||¡ qd S )N))Úpó   abcrf   rN   )Z1prÀ   rf   rN   )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*   r:   )r.   r   Úinputr‡   Zexpectedbackrˆ   r   r   r   Útest_p_codeS  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      à?rc   z<fr   z>fiÿÿÿ éh   iÿÿÿég   )
r£   r+   r,   r:   r*   r#   ÚmathÚldexpr6   r„   )r.   r­   ZdeltaZsmallerÚpackedZunpackedZ	bigpackedr   r   r   r   Útest_705836c  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      ø?r2   )r    r6   r+   r7   r,   )r.   r   r   rE   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   abcdr5   )s   cd01rn   )s   0123é   r)   )ÚbufferÚoffset)
r+   ÚStructÚbytesÚ	bytearrayr*   Úunpack_fromr£   rh   r6   r7   )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ž   ó
             r5   rN   )Úarrayr+   rÏ   Ú	pack_intoÚtobytesrh   r*   r6   rx   r7   r9   )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Ú   r5   )rÛ   rÝ   rh   r*   r6   rx   r+   r7   )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+   r:   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  àÿÿÿßAre   z encoded bool is not one byte: %r)Úmsgz2Expected OSError: struct.pack(%r, ExplodingBool()))rg   ó   ó   ÿó   ó   ðz>?)r¨   r{   rh   r+   r,   r:   r*   ZassertFalseri   r8   rç   r©   )r.   ré   rD   ZfalseÚtrueZfalseFormatZpackedFalseZunpackedFalseZ
trueFormatZ
packedTrueZunpackedTruerC   rÈ   rA   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{}Hr5   )rE   r¦   r§   r6   r+   r7   r8   )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12345rN   r   Zc12345r…   ó   xZ14s42zspam and eggss   spam and eggs)rÛ   r6   r+   r7   r,   r:   rÜ   rÒ   )r.   Ústorer   r   r   Útest_trailing_counter  s*   ÿÿÿÿz StructTest.test_trailing_counterc                 C   s   t  d¡}| d¡ d S )Nr   r4   )r+   rÏ   rw   ©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+   r8   Úcheck_sizeofrÏ   )r.   Z
format_strZnumber_of_codesZ	totalsizer   r   r   rù   4  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Ò  Úfdr5   Zxxxxxxxxxxxxxxr   Z100HZ187sZ20prL   Z0c)r   rù   )r.   r   r   r   r   Útest__sizeof__;  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+   r7   rÜ   rÑ   rÒ   ©r.   Zregex1Zregex2r   r   r   Útest_boundary_error_messageI  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+   r7   rÜ   rÒ   )r.   Z	byte_listr   r   r   Ú0test_boundary_error_message_with_negative_offsetZ  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 rn   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+   r7   rÜ   rÑ   rÒ   rþ   r   r   r   Ú-test_boundary_error_message_with_large_offsetp  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   )r6   r9   r+   r:   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*   rE   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   rN   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   s:   t  d¡}t |¡}| d¡ ~t ¡  |  |ƒ d¡ d S )NÚ_structr   z(_struct module was not garbage collected)r   Zimport_fresh_moduleÚweakrefÚrefr8   ÚgcZcollectZassertIsNone)r.   Z_struct_moduleZ
module_refr   r   r   Ú'test__struct_reference_cycle_cleaned_up¥  s   


ÿz2StructTest.test__struct_reference_cycle_cleaned_upc              
   C   s„   t j}tt  dd¡ƒ}||fD ]0}| j|d  |  t¡ d|_W d   ƒ n1 s+w   Y  W d   ƒ n1 s:w   Y  qd S )Nr   rô   )rÔ   r)   )r+   rÏ   ÚtypeÚiter_unpackZsubTestr6   r9   r…   )r.   rÏ   Zunpack_iteratorrÔ   r   r   r   Útest__struct_types_immutable´  s   ÿ€ÿ€ÿz'StructTest.test__struct_types_immutablec              	   C   sF   dD ]}|   tjd¡ t |¡ W d   ƒ n1 sw   Y  qd S )N)ú z2 irf   zembedded null character)rý   r+   r7   r8   r÷   r   r   r   Útest_issue35714À  s   ÿþ€ÿzStructTest.test_issue35714N)"r‘   r’   r“   r/   r<   rI   rm   rt   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   r   r(   $   sB    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ú>ibcprN   s   1234567s   123456s   12345678r   s   12)r+   rÏ   r  r6   r7   )r.   r  r"   r  r   r-   r   Útest_constructÍ  s&   


ÿÿ
ÿ"ÿz!UnpackIteratorTest.test_constructc                 C   s$   t t d¡ d¡ƒ}|  t|¡ d S )Nr  rN   )r  r+   rÏ   r  r6   r9   )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*   Únextr6   Ú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%  r6   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!  r1   r5   r   )ÚoperatorÚlength_hintr+   rÏ   rÐ   r£   r  r*   r%  r6   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%  r6   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    Àrd   )s   ÿ{g     üï@)s    ç      ?)s    g      p>)ó     g        )s    €g       €s    |z+infs    üz-inf)s   U5g     TÕ?r!   ú<er   ú>eÚlittleÚe))r2  s   ü)r2  s    þ)r2  s   ÿÿ)r2  s   |)r2  s    ~)r2  s   ÿr)   é~   ))r3  s    g     `>)r3  r1  g      `>)r3  r1  g      P>)r3  ó   ÿg     ø?)r3  r7  güÿÿÿÿû?)r3  ó    g     ü?)r3  r8  r0  )r3  s   <g    ð?)r3  ó   < g     ð?)r3  r9  g     ð?)r3  ó   {ÿiàÿ  )r3  r:  iïÿ  )r3  s   €g     `¾)r3  ó   € g      `¾)r3  r;  g      P¾)r3  s   ¼g    ð¿)r3  ó   ¼ g     ð¿)r3  r<  g     ð¿)r3  s   ûÿi ÿÿ))r3  ç     þï@)r3  ç      ð@)r3  çœu ˆ<ä7~)r3  ç     þïÀ)r3  ç      ðÀ)r3  çœu ˆ<ä7þ)r2  r=  )r2  r>  )r2  r?  )r2  r@  )r2  rA  )r2  rB  )r3  s   gÿg  ÿÿÿýŸ@)Úfloatr*   r+   r:   r,   r¦   r   ri   rÆ   ÚisnanÚnanr6   r„   )r.   Z&format_bits_float__cleanRoundtrip_listZle_bitsrB   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/  rG  r   r   r   r   r  È  s    
	r  Ú__main__)Úcollectionsr   rÛ   r  rÆ   r,  r³   r+   r¦   r  rê   r   Ztest.supportr   Ztest.support.script_helperr   r   r%   r   r   r    r#   r'   r´   r(   r  r‘   Úmainr   r   r   r   Ú<module>   s:    
     ) 2ÿ