B
    u9ak„  ã               @   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	 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Úbig)ÚbÚBÚhÚHÚiÚIÚlÚLÚqÚQÚnÚN)Ú ú@ú=ú<ú>ú!c             c   s<   x6t D ].}x(| D ] }|dkr&|dkr&q||fV  qW qW d S )N)r   r   )r   r   )Úinteger_codes)Ú
byteordersÚcodeÚ	byteorder© r   ú!/usr/lib/python3.7/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d3S )4Ú
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}xØdD ]Ð}	xÊd	D ]Â}
|	|
 }
t  |
||||||||¡	}t  |
|¡\}}}}}}}}|  ||¡ |  ||¡ |  ||¡ |  ||¡ |  ||¡ |  td
| ƒtd
| ƒ¡ |  td
| ƒtd
| ƒ¡ |  ||¡ q0W q&W d S )Nó   ar%   éÿ   iÿÿ  i   goƒÀÊ!	@T)r   r   r   r   r   r   )z	xcbhilfd?z	xcBHILfd?éd   )r'   r(   r5   r&   Úint)r)   Úcr   r   r	   r   Úfr.   ÚtÚprefixÚformatr   ZcpZbpZhpZipZlpÚfpZdpÚtpr   r   r   Útest_transitiveness9   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#}x¨|D ] \}}}}}xd&| |fd'| |fd(| |fd)| t r–|p˜|fgD ]X\}}t ||¡}	|  |	|¡ |  t |¡t|	ƒ¡ t ||	¡d* }
|
|krž|  |¡ qžW qZW d S )+N)r<   r8   r8   r8   r   )Zxcr8   s    as    ar   )Zcxr8   s   a s   a r   )r   r8   r8   r8   r   )Ú0ss
   helloworldó    rE   r%   )Z1ss
   helloworldó   hrF   r%   )Z9ss
   helloworlds	   helloworls	   helloworlr%   )Z10ss
   helloworlds
   helloworlds
   helloworldr   )Z11ss
   helloworlds   helloworld s   helloworld r%   )Z20ss
   helloworlds   helloworld          s   helloworld          r%   )r   é   ó   rH   r   )r   iùÿÿÿó   ùrI   r   )r   rG   rH   rH   r   )r   éù   rI   rI   r   )r   i¼  s   ¼s   ¼r   )r   iDýÿÿs   ýDs   Dýr   )r   i¼  s   ¼s   ¼r   )r   iDý  s   ýDs   Dýr   )r	   i€,s   ,€s   €,r   )r	   i€âÓûs   ûÓâ€s   €âÓûr   )r
   i€,s   ,€s   €,r   )r
   l   €b§w s   ûÓâ€s   €âÓûr   )r   i€,s   ,€s   €,r   )r   i€âÓûs   ûÓâ€s   €âÓûr   )r   i€,s   ,€s   €,r   )r   l   €b§w s   ûÓâ€s   €âÓûr   )r=   g       @s   @   s      @r   )r.   g       @s   @       s          @r   )r=   g       Às   À   s      Àr   )r.   g       Às   À       s          Àr   )ú?r   ó    rL   r   )rK   r,   ó   rM   r%   )rK   TrM   rM   r   rK   rL   r%   )rK   )r%   rM   rM   r%   r   r   r   r   r   )r!   r'   r(   r&   r3   Úlenr5   Ú
assertTrue)r)   Ztestsr6   Úargr   ZlilZasyZxfmtÚexpZresZrevr   r   r   Útest_new_featuresQ   sX     zStructTest.test_new_featuresc       
      C   sf  dddddddddddœ
}x6t dƒD ]*\}}|| }t |¡}|  ||| ¡ q$W d}xJ|D ]B}x<dD ]4}t ||d	  ¡}t ||d  ¡}	|  ||	¡ qfW q\W |  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%   r0   é   é   )
r   r   r   r   r	   r
   r   r   r   r   )r   r   r   r   )ZbBZhHZiIZlLÚnNZqQ)r   r   r   r   r   r   r	   r   r   r-   )r   r'   r3   r&   ZassertLessEqualÚassertGreaterEqual)
r)   Zexpected_sizer   r   r@   ÚsizeZnative_pairsZformat_pairZsigned_sizeZunsigned_sizer   r   r   Útest_calcsize†   s0    



zStructTest.test_calcsizec                sR   dd l ‰G ‡ ‡‡fdd„dtjƒ‰ x*tƒ D ] \}}|| ‰ˆ ˆƒ}| ¡  q*W 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krHtd| j ƒ‚t |¡| _	| j	d | _
| jtdƒkrœd| _d| j
d	   | _d| j
d	  d	 | _n:| jtd
ƒkrÈd| _d| _d| j
 d	 | _ntd| j ƒ‚d S )NÚtest_one)Z
methodNamer   z"unrecognized packing byteorder: %srT   ZbhilqnTr0   r%   ZBHILQNFr   zunrecognized format code: %s)ÚsuperÚ__init__r@   r   r   r   Ú
ValueErrorr'   r3   ÚbytesizeÚbitsizeÚtupleÚsignedÚ	min_valueÚ	max_value)r)   r@   )Ú	IntTesterÚ	__class__r   r   r[   ­   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k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ÚasciirL   r   )r   r   r   rM   )r@   ra   rb   r`   r^   rV   rN   Úencoder]   r   r!   r    r&   r1   r'   r2   r4   ÚOverflowErrorr\   )	r)   Úxr(   r5   Ú	unhexlifyr@   ÚexpectedÚgotZ	retrievedr   r   r   rY   Ã   s2    


z4StructTest.test_integers.<locals>.IntTester.test_onec                s:  ddl m} g }x$t| jd ƒD ]}| d|> ¡ q W xDt| jƒD ]6}d}x"t| jƒD ]}|d> |dƒB }qVW | |¡ qBW | ddtjd	 g¡ x@|D ]8}x2| |fD ]$}xd
D ]}|| }	|  	|	¡ q²W q¨W q˜W 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|ƒ ¡ xZ|dƒ|dƒ|dƒ|dƒ|dƒ|dƒfD ].}yt ˆ |¡ W n   |  d¡ Y nX q²W xP|dƒ|dƒ|d ƒ|ddiƒ|dddgƒfD ] }|  ttjftj| j|¡ qW d S )Nr   )Ú	randranger,   r%   rT   é   i,  i`®
 rS   )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__rp   r   r   r   r   ÚNotAnInt  s   rt   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 )N)Ú_value)r)   r"   r   r   r   r[     s    zKStructTest.test_integers.<locals>.IntTester.run.<locals>.Indexable.__init__c             S   s   | j S )N)ru   )r)   r   r   r   Ú	__index__  s    zLStructTest.test_integers.<locals>.IntTester.run.<locals>.Indexable.__index__N)rq   rr   rs   r[   rv   r   r   r   r   Ú	Indexable  s   rw   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 )N)r4   )r)   r   r   r   rv     s    zKStructTest.test_integers.<locals>.IntTester.run.<locals>.BadIndex.__index__c             S   s   dS )Nro   r   )r)   r   r   r   rp     s    zIStructTest.test_integers.<locals>.IntTester.run.<locals>.BadIndex.__int__N)rq   rr   rs   rv   rp   r   r   r   r   ÚBadIndex  s   rx   za stringy      @      E@é
   é   ro   r:   é   z:integer code pack failed on object with '__index__' methodr8   r   Úar0   )Zrandomrm   Úranger^   Úappendr]   ÚextendÚsysÚmaxsizerY   Úobjectr1   r4   r'   r2   r(   r@   Úfail)r)   rm   ÚvaluesrQ   r	   ÚvalÚjÚbaseZincrri   rt   rw   rx   Úobj)r@   r   r   Úruné   sX    

	z/StructTest.test_integers.<locals>.IntTester.run)rq   rr   rs   r[   r'   r(   r5   rj   rY   r‰   Ú__classcell__r   )rc   Úbinasciir@   )rd   r   rc   ¬   s
   $rc   )r‹   ÚunittestÚTestCaser   r‰   )r)   r   r   r>   r   )rc   r‹   r@   r   Útest_integers¨   s     zStructTest.test_integersc                s\   ‡ fdd„}xJdD ]B}x<dD ]4}|| }|t j|ƒ |t j|dƒ |t j|dƒ qW qW d S )Nc          	      s8   ˆ   tj¡}| ||Ž W d Q R X ˆ  dt|jƒ¡ d S )Nzbad char in struct format)r1   r'   r2   ZassertInÚstrZ	exception)ÚfuncÚargsÚkwargsÚcm)r)   r   r   ÚassertStructErrorD  s    z2StructTest.test_nN_code.<locals>.assertStructErrorrU   )r   r   r   r   r   rE   )r'   r3   r(   r5   )r)   r”   r   r   r@   r   )r)   r   Útest_nN_codeB  s    

zStructTest.test_nN_codec             C   sL   xFdD ]>\}}}}t  ||¡}|  ||¡ t  ||¡\}|  ||¡ qW d S )N))Úps   abcrL   rE   )Z1ps   abcrL   rE   )Z2ps   abcs   ar8   )Z3ps   abcs   abs   ab)Z4ps   abcs   abcs   abc)Z5ps   abcs   abc s   abc)Z6ps   abcs   abc  s   abc)Z1000psè  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsè  ÿxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsÿ   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r'   r(   r&   r5   )r)   r   Úinputrk   Zexpectedbackrl   r   r   r   Útest_p_codeO  s
    	zStructTest.test_p_codec             C   sü   xœt ddƒD ]Ž}d}x||d  |kr0|d }qW || }t d|¡}t d|¡d }|  ||¡ t d|¡}|  |t|ƒ¡ t d|¡d }|  ||¡ qW d}t |d	¡}t d|¡}t d|¡d }|  ||¡ d
}t |d¡}|  t	tjd|¡ d S )Nr%   é!   g      à?g       @z<fr   z>fiÿÿÿ éh   iÿÿÿég   )
r}   r'   r(   r5   r&   r    ÚmathZldexpr1   rh   )r)   r‡   ZdeltaZsmallerÚpackedZunpackedZ	bigpackedr   r   r   r   Útest_705836_  s(    zStructTest.test_705836c             C   sp   xBt ƒ D ]8\}}|| }|  tjtj|d¡ |  tjtj|d¡ qW |  tjtjdd¡ |  tjtjdd¡ d S )Ng      ð?g      ø?r-   )r   r1   r'   r2   r(   )r)   r   r   r@   r   r   r   Útest_1530559€  s    zStructTest.test_1530559c          	   C   sª  d}d}t  |¡}x¶ttfD ]ª}||ƒ}|  | |¡d¡ |  | |d¡d¡ |  | |d¡d¡ x2tdƒD ]&}|  | ||¡|||d … f¡ qlW x.tdt|ƒd	 ƒD ]}|  t j	|j||¡ qªW qW xÄttfD ]¸}||ƒ}|  t  ||¡d¡ |  t  ||d¡d¡ |  t  ||d¡d¡ x6tdƒD ]*}|  t  |||¡|||d … f¡ q*W x2tdt|ƒd	 ƒD ]}|  t j	t j|||¡ qlW qÔW |  |j|dd
d¡ d S )Ns	   abcd01234Z4s)s   abcdr0   )s   cd01rS   )s   0123é   r%   )ÚbufferÚoffset)
r'   ÚStructÚbytesÚ	bytearrayr&   Úunpack_fromr}   rN   r1   r2   )r)   Útest_stringr6   r   ÚclsÚdatar	   r   r   r   Útest_unpack_fromˆ  s.    
&* 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 )
Ns   Reykjavik rocks, eow!r   sd                                                                                                       Ú21sr   ry   s
             r0   rE   )Úarrayr'   r£   Ú	pack_intoÚtobytesrN   r&   r1   r\   r2   r4   )r)   r§   Úwritable_bufr6   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 )Ns   Reykjavik rocks, eow!r   sd                                                                                                       r«   c                 s   t jˆ f| žŽ S )N)r'   r­   )r‘   )r6   r   r   Ú<lambda>Ã  rE   z.StructTest.test_pack_into_fn.<locals>.<lambda>r   ry   s
             r0   )r¬   r®   rN   r&   r1   r\   r'   r2   )r)   r§   r¯   r­   r°   r±   r   )r6   r   Útest_pack_into_fn¿  s    zStructTest.test_pack_into_fnc             C   sD   t   dd¡}tdƒ}x*||gD ]}t d|¡\}|  |d¡ qW d S )Nr   s   4Vxz>IixV4)r¬   Ú
memoryviewr'   r5   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 ƒ}xptdƒd D ]^}dg g ddf}dgd	d
dddf}|dt|ƒ  }tj|f|žŽ }t ||¡}|dt|ƒ  }tj|f|žŽ }	t ||	¡}
|  t|ƒt|
ƒ¡ |  t|ƒt|ƒ¡ x|D ]}|  |¡ qÌW x|
D ]}|  |¡ qäW t |d d¡}|  t|ƒt 	|d ¡¡ t|ƒdkr@| j|d| d yt |d |ƒ ¡ W n t
k
rl   Y q X |  d|d  ¡ q W x$dD ]}|  t d|¡d ¡ qŠW d S )Nc               @   s   e Zd Zdd„ ZdS )z+StructTest.test_bool.<locals>.ExplodingBoolc             S   s   t ‚d S )N)ÚOSError)r)   r   r   r   Ú__bool__à  s    z4StructTest.test_bool.<locals>.ExplodingBool.__bool__N)rq   rr   rs   r¸   r   r   r   r   ÚExplodingBoolß  s   r¹   z<>!=)r   r   r   r   r%   Útesté   r   l        g  àÿÿÿßArK   z encoded bool is not one byte: %r)Úmsgz2Expected OSError: struct.pack(%r, ExplodingBool()))rM   ó   ó   ÿó   ó   ðz>?)r‚   r_   rN   r'   r(   r5   r&   ZassertFalserO   r3   r·   rƒ   )r)   r¹   r?   ZfalseÚtrueZfalseFormatZpackedFalseZunpackedFalseZ
trueFormatZ
packedTrueZunpackedTruer>   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{}Hr0   )r@   r€   r   r1   r'   r2   r3   )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   sd                                                                                                       Z12345rE   r   Zc12345ri   ó   xZ14s42zspam and eggss   spam and eggs)r¬   r1   r'   r2   r(   r5   r­   r¦   )r)   Ústorer   r   r   Útest_trailing_counter  s"    z StructTest.test_trailing_counterc             C   s   t  d¡}| d¡ d S )Nr	   r/   )r'   r£   r[   )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'   r3   Úcheck_sizeofr£   )r)   Z
format_strZnumber_of_codesZ	totalsizer   r   r   rÈ   0  s    
zStructTest.check_sizeofc             C   sŠ   xt D ]}|  |d¡ qW |  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Ò  Úfdr0   Zxxxxxxxxxxxxxxr   Z100HZ187sZ20prD   Z0c)r   rÈ   )r)   r   r   r   r   Útest__sizeof__7  s    
zStructTest.test__sizeof__c          	   C   s6   d}|   tj|¡ t dtdƒdd¡ W d Q R X 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»   )ÚassertRaisesRegexr'   r2   r­   r¥   )r)   Úregexr   r   r   Útest_boundary_error_messageE  s    z&StructTest.test_boundary_error_messagec          	   C   s`   t dƒ}|  tjd¡ t d|dd¡ W d Q R X |  tjd¡ t d|dd¡ W d Q R X d S )	Nry   z%no space to pack 4 bytes at offset -2z<Iéþÿÿÿé{   z*offset -11 out of range for 10-byte bufferz<Biõÿÿÿ)r¥   rÌ   r'   r2   r­   )r)   Z	byte_listr   r   r   Ú0test_boundary_error_message_with_negative_offsetN  s    z;StructTest.test_boundary_error_message_with_negative_offsetc          	   C   sX   dt tjd ƒ d t tjƒ d }|  tj|¡ t dtdƒtjd¡ W d Q R X d S )Nz(pack_into requires a buffer of at least rS   z% bytes for packing 4 bytes at offset z \(actual buffer size is 10\)z<Iry   r%   )r   r€   r   rÌ   r'   r2   r­   r¥   )r)   rÍ   r   r   r   Ú-test_boundary_error_message_with_large_offsetZ  s    z8StructTest.test_boundary_error_message_with_large_offsetc          	   C   s:   |   t¡ t dd¡ W d Q R X |  t dd¡d¡ d S )Nr   r   r8   )éa   )r1   r4   r'   r5   r&   )r)   r   r   r   Útest_issue29802d  s    zStructTest.test_issue29802c             C   s<   t  d¡}|  |jd¡ t  |j ¡ ¡}|  |j|j¡ d S )Nz=i2H)r'   r£   r&   r@   rg   )r)   r   Ús2r   r   r   Útest_format_attrm  s    
zStructTest.test_format_attrN)rq   rr   rs   r*   r7   rC   rR   rX   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$       s4   5" !+	
	r$   c               @   s@   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S )ÚUnpackIteratorTestzD
    Tests for iterative unpacking (struct.Struct.iter_unpack).
    c          	      sÐ   ‡ fdd„}t  d¡}| d¡}||ƒ | d¡}||ƒ ˆ  t j¡ | d¡ W d Q R X ˆ  t j¡ | d¡ W d Q R X t  d¡}ˆ  t j¡ | d¡ W d Q R X ˆ  t j¡ | d	¡ W d Q R X d S )
Nc                s    ˆ   | tj¡ ˆ   | tj¡ d S )N)ZassertIsInstancer   ÚIteratorÚIterable)Úit)r)   r   r   Ú_check_iterator|  s    z:UnpackIteratorTest.test_construct.<locals>._check_iteratorz>ibcprE   s   1234567s   123456s   12345678r   s   12)r'   r£   Úiter_unpackr1   r2   )r)   rÛ   r   rÚ   r   )r)   r   Útest_construct{  s    



z!UnpackIteratorTest.test_constructc             C   sr   t  d¡}ttddƒƒ}| |¡}|  t|ƒd¡ |  t|ƒd¡ |  t|ƒd¡ |  tt|¡ |  tt|¡ d S )Nz>IBr%   é   )ir»   )i	ry   )ié   )	r'   r£   r¤   r}   rÜ   r&   Únextr1   Ú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 )Nz>IBr%   é   )ir»   )i	ry   )
r'   r£   r¤   r}   rÜ   rµ   r&   rà   r1   rá   )r)   r   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 )Nz>IBr%   rÞ   r,   r0   r   )ÚoperatorÚlength_hintr'   r£   r¤   r}   rÜ   r&   rà   r1   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 )Nz>IBr%   rã   )ir»   )i	ry   )r'   rÜ   r¤   r}   r&   rà   r1   rá   )r)   rÚ   r   r   r   Útest_module_func²  s
    z#UnpackIteratorTest.test_module_funcc             C   sz  ddddddddt d	ƒfd
t dƒfdg
}xÚ|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.W ddddddg}xT|D ]L\}}|  t 	t d|¡d ¡¡ |  t 	t d|d d d… ¡d ¡¡ qW t dtj
¡}|  |d d@ d¡ t dtj
 ¡}|  |d d@ d¡ dddddd d!d"d#d$d%d&d'd(d)d*d+d,d-g}	x(|	D ] \}}}|  |t ||¡¡ qàW d.d/d0d1d2d3d4d5d6d7d8d9g}
x$|
D ]\}}|  ttj||¡ q&W d:g}x(|D ] \}}}|  |t ||¡¡ qRW d S );N)s    <g      ð?)s    Àg       À)s   ÿ{g     üï@)s    g      ?)s    g      p>)s     g        )s    €g       €s    |z+infs    üz-inf)s   U5g     TÕ?r   z<er   z>eÚlittleÚe)z<es   ü)z<es    þ)z<es   ÿÿ)z<es   |)z<es    ~)z<es   ÿr%   é~   )z>es    g     `>)z>es     g      `>)z>es     g      P>)z>es   ÿg     ø?)z>es   ÿgüÿÿÿÿû?)z>es    g     ü?)z>es    g      ?)z>es   <g    ð?)z>es   < g     ð?)z>es   < g     ð?)z>es   {ÿiàÿ  )z>es   {ÿiïÿ  )z>es   €g     `¾)z>es   € g      `¾)z>es   € g      P¾)z>es   ¼g    ð¿)z>es   ¼ g     ð¿)z>es   ¼ g     ð¿)z>es   ûÿi ÿÿ)z>eg     þï@)z>eg      ð@)z>egœu ˆ<ä7~)z>eg     þïÀ)z>eg      ðÀ)z>egœu ˆ<ä7þ)z<eg     þï@)z<eg      ð@)z<egœu ˆ<ä7~)z<eg     þïÀ)z<eg      ðÀ)z<egœu ˆ<ä7þ)z>es   gÿg  ÿÿÿýŸ@)Úfloatr&   r'   r5   r(   r€   r   rO   rœ   ZisnanÚnanr1   rh   )r)   Z&format_bits_float__cleanRoundtrip_listZle_bitsr=   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º  s    


,z"UnpackIteratorTest.test_half_floatN)
rq   rr   rs   Ú__doc__rÝ   râ   rä   rç   rè   rï   r   r   r   r   r×   v  s   
	r×   Ú__main__)Úcollectionsr   r¬   rœ   rå   rŒ   r'   r€   rº   r   r   r!   r   r   r   r    r#   r   r$   r×   rq   Úmainr   r   r   r   Ú<module>   s,   
    Z .