a
    äzeè‡  ã                   @   s<  d dl Z 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m	Z	m
Z
mZ e d¡Ze  ee ¡ dƒd¡Ze  ee ¡ dƒd¡ZG dd	„ d	e jƒZG d
d„ de jƒZG dd„ de jƒZG dd„ de jƒZG dd„ deƒZG dd„ dee jƒZG dd„ dee jƒZdefdd„ZdZG dd„ dƒZe dkr8e  !¡  dS )é    N)Úsupport)Ú
bigmemtestÚ_1GÚ_4GÚzlibÚcopyzrequires Compress.copy()zrequires Decompress.copy()c                   @   s   e Zd Zdd„ ZdS )ÚVersionTestCasec                 C   s   |   tjd tjd ¡ d S )Nr   )ÚassertEqualr   ÚZLIB_RUNTIME_VERSIONÚZLIB_VERSION©Úself© r   ú$/usr/lib/python3.9/test/test_zlib.pyÚtest_library_version   s    z$VersionTestCase.test_library_versionN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r      s   r   c                   @   sD   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S )ÚChecksumTestCasec                 C   s0   |   t d¡t dd¡¡ |  t dd¡¡ d S )Nó    r   ó   abcì   ÿÿ )r	   r   Úcrc32Ú
assertTruer   r   r   r   Útest_crc32start!   s    z ChecksumTestCase.test_crc32startc                 C   s@   |   t dd¡d¡ |   t dd¡d¡ |   t dd¡d¡ d S ©Nr   r   é   i°  )r	   r   r   r   r   r   r   Útest_crc32empty%   s    z ChecksumTestCase.test_crc32emptyc                 C   s0   |   t d¡t dd¡¡ |  t dd¡¡ d S )Nr   r   r   r   )r	   r   Úadler32r   r   r   r   r   Útest_adler32start*   s    z"ChecksumTestCase.test_adler32startc                 C   s@   |   t dd¡d¡ |   t dd¡d¡ |   t dd¡d¡ d S r   )r	   r   r   r   r   r   r   Útest_adler32empty.   s    z"ChecksumTestCase.test_adler32emptyc                 C   sˆ   |   t dd¡d¡ |   t dd¡d¡ |   t dd¡d¡ |   t dd¡d¡ |   t d¡t dd¡¡ |   t d¡t dd¡¡ d S )Ns   penguinr   l    !ƒK r   i”ª¶CiöÏi÷Ö©r	   r   r   r   r   r   r   r   Útest_penguins3   s    zChecksumTestCase.test_penguinsc                 C   sT   d}|   t |¡d¡ |   t d¡d¡ |   t || ¡d¡ |   t d¡d¡ d S )Nó   abcdefghijklmnopì   “@u( ó   spami=ÿÚCl    * i²Or!   )r   Úfoor   r   r   Útest_crc32_adler32_unsigned<   s
    z,ChecksumTestCase.test_crc32_adler32_unsignedc                 C   sH   d}d}|   t |¡|¡ |   t |¡|¡ |   t d¡t d¡¡ d S )Nr#   r$   r%   )r	   Úbinasciir   r   )r   r&   Úcrcr   r   r   Útest_same_as_binascii_crc32D   s
    z,ChecksumTestCase.test_same_as_binascii_crc32N)
r   r   r   r   r   r   r    r"   r'   r*   r   r   r   r   r      s   	r   c                   @   s&   e Zd Zeed ddddd„ ƒZdS )ÚChecksumBigBufferTestCaseé   r   F)ÚsizeÚmemuseÚdry_runc                 C   s4   dt d  }|  t |¡d¡ |  t |¡d¡ d S )Ns   nyanr   iM"B>l   ía )r   r	   r   r   r   )r   r-   Údatar   r   r   Útest_big_bufferO   s    z)ChecksumBigBufferTestCase.test_big_bufferN)r   r   r   r   r   r1   r   r   r   r   r+   M   s   r+   c                   @   sB   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zej	dd„ ƒZ
dS )ÚExceptionTestCasec                 C   s   |   tjtjdd¡ d S )Ns   ERRORé
   )ÚassertRaisesr   ÚerrorÚcompressr   r   r   r   Útest_badlevelX   s    zExceptionTestCase.test_badlevelc                 C   s’   |   ttj¡ |   ttj¡ |   ttj¡ |   ttj¡ dd dddg fD ]D}|   ttj|¡ |   ttj|¡ |   ttj|¡ |   ttj|¡ qHd S )Né*   Ú Úabcr   )r4   Ú	TypeErrorr   r   r   r6   Ú
decompress)r   Úargr   r   r   Útest_badargs^   s    zExceptionTestCase.test_badargsc                 C   s6   |   ttjdtjd¡ |   ttjdtjtjd ¡ d S )Nr   r   )r4   Ú
ValueErrorr   ÚcompressobjÚDEFLATEDÚ	MAX_WBITSr   r   r   r   Útest_badcompressobji   s    ÿz%ExceptionTestCase.test_badcompressobjc                 C   s   |   ttjd¡ d S )Néÿÿÿÿ)r4   r?   r   Údecompressobjr   r   r   r   Útest_baddecompressobjp   s    z'ExceptionTestCase.test_baddecompressobjc                 C   s,   |   tt ¡ jd¡ |   tt ¡ jd¡ d S )Nr   rD   )r4   r?   r   rE   Úflushr   r   r   r   Útest_decompressobj_badflusht   s    z-ExceptionTestCase.test_decompressobj_badflushc                 C   sÆ   |   td¡$ t ddtjd ¡ W d   ƒ n1 s60    Y  |   td¡& t ¡  dtjd ¡ W d   ƒ n1 sx0    Y  |   td¡$ t ¡  tjd ¡ W d   ƒ n1 s¸0    Y  d S )Nzint too larger   é   r   )ÚassertRaisesRegexÚOverflowErrorr   r<   ÚsysÚmaxsizerE   rG   r   r   r   r   Útest_overflowy   s    24zExceptionTestCase.test_overflowN)r   r   r   r7   r>   rC   rF   rH   r   Zcpython_onlyrN   r   r   r   r   r2   V   s   r2   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚBaseCompressTestCasec                 C   sB   d}t  |d ¡}||t|ƒ d  }z||ƒ W d }nd }0 d S )Né   r3   r   )ÚrandomÚ	randbytesÚlen)r   r-   Zcompress_funcZ_1Mr0   r   r   r   Úcheck_big_compress_buffer„   s    
z.BaseCompressTestCase.check_big_compress_bufferc                 C   sf   d| }zt  |d¡}W d }nd }0 ||ƒ}z.|  t|ƒ|¡ |  t| d¡ƒd¡ W d }nd }0 d S )Nó   xr   r   )r   r6   r	   rS   Ústrip)r   r-   Zdecompress_funcr0   Ú
compressedr   r   r   Úcheck_big_decompress_buffer‘   s    z0BaseCompressTestCase.check_big_decompress_bufferN)r   r   r   rT   rX   r   r   r   r   rO   ƒ   s   rO   c                   @   s¢   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zeed	 d
ddd„ ƒZ	eed	 dddd„ ƒZ
eedddd„ ƒZdd„ Ze ejdkd¡eed dddd„ ƒƒZdS )ÚCompressTestCasec                 C   s    t  t¡}|  t  |¡t¡ d S ©N)r   r6   ÚHAMLET_SCENEr	   r<   ©r   Úxr   r   r   Útest_speech£   s    
zCompressTestCase.test_speechc                 C   sx   t jtdd}|  t  |¡t¡ |  t¡ t jtdd W d   ƒ n1 sN0    Y  |  t j|t jt jdt¡ d S )Né   )Úlevel)r0   r`   )ÚwbitsÚbufsize)	r   r6   r[   r	   r<   r4   r;   rB   ÚDEF_BUF_SIZEr\   r   r   r   Útest_keywords§   s    ,
þýzCompressTestCase.test_keywordsc                 C   sP   t d }t |¡}|  t t|ƒ¡|¡ |t|ƒfD ]}|  t |¡|¡ q4d S ©Né€   )r[   r   r6   r	   Ú	bytearrayr<   )r   r0   r]   Úobr   r   r   Útest_speech128±   s
    
zCompressTestCase.test_speech128c                 C   s*   t  t¡}|  t jdt j|d d… ¡ d S )NzAError -5 while decompressing data: incomplete or truncated streamrD   )r   r6   r[   rJ   r5   r<   r\   r   r   r   Útest_incomplete_stream¹   s
    
þz'CompressTestCase.test_incomplete_streamrP   r_   ©r-   r.   c                 C   s   dd„ }|   ||¡ d S )Nc                 S   s   t  | d¡S ©Nr   )r   r6   ©Úsr   r   r   Ú<lambda>Ä   r   z;CompressTestCase.test_big_compress_buffer.<locals>.<lambda>)rT   ©r   r-   r6   r   r   r   Útest_big_compress_bufferÂ   s    z)CompressTestCase.test_big_compress_bufferé   c                 C   s   |   |tj¡ d S rZ   )rX   r   r<   )r   r-   r   r   r   Útest_big_decompress_bufferÇ   s    z+CompressTestCase.test_big_decompress_bufferr   c                 C   s.   t d }t |d¡}|  t |d|¡|¡ d S ©Nr3   r   rI   )r[   r   r6   r	   r<   )r   r-   r0   rW   r   r   r   Útest_large_bufsizeË   s    z#CompressTestCase.test_large_bufsizec                 C   s0   t d }t |d¡}|  t |dtƒ ¡|¡ d S rt   )r[   r   r6   r	   r<   Ú	CustomInt)r   r0   rW   r   r   r   Útest_custom_bufsizeÒ   s    z$CompressTestCase.test_custom_bufsizeì        úrequires 64bit platforméd   r,   c                 C   sB   d| }z*t  |d¡}|  t  |¡|¡ W d  }}n
d  }}0 d S ©NrU   r   )r   r6   r	   r<   )r   r-   r0   Úcompr   r   r   Útest_64bit_compress×   s
    z$CompressTestCase.test_64bit_compressN)r   r   r   r^   rd   ri   rj   r   r   rq   rs   r   ru   rw   ÚunittestÚ
skipUnlessrL   rM   r}   r   r   r   r   rY   ¡   s   
	



rY   c                   @   sö  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd]dd„Zdd„ Zd^dd„Z	d_dd„Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Ze eed!ƒd"¡d#d$„ ƒZd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zee d7d8d9d:„ ƒZ!d;d<„ Z"e#d=d>„ ƒZ$e#d?d@„ ƒZ%e&dAdB„ ƒZ'e&dCdD„ ƒZ(dEdF„ Z)dGdH„ Z*ee+dI dJd8dKdL„ ƒZ,ee+dI dMd8dNdO„ ƒZ-e e.j/dPkdQ¡ee dR dSd8dTdU„ ƒƒZ0e e.j/dPkdQ¡ee dR dJd8dVdW„ ƒƒZ1e e.j/dPkdQ¡ee dR dXd8dYdZ„ ƒƒZ2d[d\„ Z3d
S )`ÚCompressObjectTestCasec                 C   sÎ   t d }t |¡}|t|ƒfD ]>}t ¡ }| |¡}| ¡ }|  tj|j¡ |  || |¡ q||ft|ƒt|ƒffD ]R\}}t 	¡ }	|	 
|| ¡}
|	 ¡ }|  ||
| ¡ |  |	jt¡ |  |	jt¡ qvd S re   )r[   r   r6   rg   r@   rG   r4   r5   r	   rE   r<   ÚassertIsInstanceÚunconsumed_tailÚbytesÚunused_data)r   ZdatasrcZdatazipr0   ÚcoÚx1Úx2Zv1Zv2ÚdcoÚy1Úy2r   r   r   Ú	test_pairä   s    

 z CompressObjectTestCase.test_pairc           
      C   sê   d}t j}d}d}t j}t j|||||dd}t j|dd}|  t¡ |jtd W d   ƒ n1 sh0    Y  |  t¡" |j	t  t¡d W d   ƒ n1 s¤0    Y  | t¡| 
¡  }|j	|ttƒd| 
¡  }	|  t|	¡ d S )	Nrr   éôÿÿÿé	   r   )r`   Úmethodra   ÚmemLevelÚstrategyÚzdict©ra   r‘   )r0   )Ú
max_length)r   rA   Ú
Z_FILTEREDr@   rE   r4   r;   r6   r[   r<   rG   rS   r	   )
r   r`   rŽ   ra   r   r   r…   Údor]   Úyr   r   r   rd   ÷   s(    û*0z$CompressObjectTestCase.test_keywordsc                 C   sp   d}t j}d}d}t j}t  |||||¡}| t¡}| ¡ }t  |¡}	|	 || ¡}
|	 ¡ }|  	t|
| ¡ d S )Nrr   rŒ   r   )
r   rA   r”   r@   r6   r[   rG   rE   r<   r	   )r   r`   rŽ   ra   r   r   r…   r†   r‡   rˆ   r‰   rŠ   r   r   r   Útest_compressoptions  s    

z+CompressObjectTestCase.test_compressoptionsc           	   	   C   s’   t d }t ¡ }g }tdt|ƒdƒD ] }| | |||d … ¡¡ q$| | ¡ ¡ d |¡}t 	¡ }| 
d |¡¡}| ¡ }|  ||| ¡ d S )Nrf   r   é   r   )r[   r   r@   ÚrangerS   Úappendr6   rG   ÚjoinrE   r<   r	   )	r   r0   r…   ÚbufsÚiÚcombufrˆ   r‰   rŠ   r   r   r   Útest_compressincremental  s    
z/CompressObjectTestCase.test_compressincrementalFNr˜   é@   c              	   C   sf  |pt }|d }t ¡ }g }tdt|ƒ|ƒD ] }| | |||| … ¡¡ q,| | ¡ ¡ d |¡}	t 	|	¡}
|  
|
t¡ |  ||
¡ t ¡ }g }tdt|	ƒ|ƒD ]H}| | 	|	||| … ¡¡ |  d|jdt|jƒ ¡ |  d|j¡ q¤|r| | ¡ ¡ n$| 	d¡}|r(| |¡ nq(q|  d|jdt|jƒ ¡ |  d|j¡ |  |d |¡¡ d S )Nrf   r   r   z"(A) uct should be b'': not %d longz"(B) uct should be b'': not %d long)r[   r   r@   r™   rS   rš   r6   rG   r›   r<   r   rƒ   r	   rE   r‚   r„   )r   rG   ÚsourceÚcxÚdcxr0   r…   rœ   r   rž   Zdecombufrˆ   Úchunkr   r   r   Útest_decompinc*  sD    


ÿÿ

ÿÿz%CompressObjectTestCase.test_decompincc                 C   s   | j dd d S ©NT)rG   )r¥   r   r   r   r   Útest_decompincflushS  s    z*CompressObjectTestCase.test_decompincflushc              	   C   sò   |pt }|d }t ¡ }g }tdt|ƒ|ƒD ] }| | |||| … ¡¡ q,| | ¡ ¡ d |¡}|  	|t 
|¡d¡ t ¡ }	g }|}
|
rÌ|	 
|
|¡}|  t|ƒ|kdt|ƒ|f ¡ | |¡ |	j}
qŠ| |	 ¡ ¡ |  	|d |¡d¡ d S )Nrf   r   r   úcompressed data failureúchunk too big (%d>%d)úWrong data retrieved©r[   r   r@   r™   rS   rš   r6   rG   r›   r	   r<   rE   ÚassertFalser‚   )r   r¡   r¢   r£   r0   r…   rœ   r   rž   rˆ   Úcbr¤   r   r   r   Útest_decompimaxV  s.    
ÿÿ
z&CompressObjectTestCase.test_decompimaxc              	   C   s>  t d }t ¡ }g }tdt|ƒdƒD ] }| | |||d … ¡¡ q$| | ¡ ¡ d |¡}|  	|t 
|¡d¡ t ¡ }g }|}|rÔdt|ƒd  }	| 
||	¡}
|  t|
ƒ|	kdt|
ƒ|	f ¡ | |
¡ |j}q‚|rè| | ¡ ¡ n>|
r&| 
d|	¡}
|  t|
ƒ|	kdt|
ƒ|	f ¡ | |
¡ qè|  	|d |¡d	¡ d S )
Nrf   r   r˜   r   r¨   r   r3   r©   rª   r«   )r   rG   r0   r…   rœ   r   rž   rˆ   r­   r“   r¤   r   r   r   Útest_decompressmaxlenq  s<    
ÿÿ
ÿz,CompressObjectTestCase.test_decompressmaxlenc                 C   s   | j dd d S r¦   )r¯   r   r   r   r   Útest_decompressmaxlenflush‘  s    z1CompressObjectTestCase.test_decompressmaxlenflushc                 C   s,   t  ¡ }|  t|jdd¡ |  d|j¡ d S )Nr   rD   )r   rE   r4   r?   r<   r	   r‚   )r   rˆ   r   r   r   Útest_maxlenmisc”  s    z&CompressObjectTestCase.test_maxlenmiscc                 C   sH   t d }|  t|ƒtj¡ t |d¡}t ¡ }|  | |t	j
¡|¡ d S ©Nr3   r   )r[   ZassertGreaterrS   r   rc   r6   rE   r	   r<   rL   rM   ©r   r0   rW   rˆ   r   r   r   Útest_maxlen_largeš  s
    z(CompressObjectTestCase.test_maxlen_largec                 C   s>   t d }t |d¡}t ¡ }|  | |tƒ ¡|d d… ¡ d S )Nr3   r   rz   )r[   r   r6   rE   r	   r<   rv   r³   r   r   r   Útest_maxlen_custom£  s    z)CompressObjectTestCase.test_maxlen_customc                 C   s:   d}t  ¡ }| |d¡}|| |j¡7 }|  |jd¡ d S )Ns
   xœKLJ Mr   r   )r   rE   r<   r‚   r	   )r   Zcdatarˆ   Zddatar   r   r   Útest_clear_unconsumed_tail©  s
    z1CompressObjectTestCase.test_clear_unconsumed_tailc                 C   sö   g d¢}t dd„ tj d¡D ƒƒ}|dkr4| d¡ dd„ |D ƒ}td	 }|D ]¢}td
ƒD ]”}zDt |¡}| |d d… ¡}| 	|¡}| |dd … ¡}	| 	¡ }
W n   t
d ||¡ƒ ‚ Y n0 |  t d |||	|
g¡¡|d||f ¡ ~qZqNd S )N)Ú
Z_NO_FLUSHÚZ_SYNC_FLUSHÚZ_FULL_FLUSHÚZ_PARTIAL_FLUSHc                 s   s   | ]}t |ƒV  qd S rZ   )Úint)Ú.0Úvr   r   r   Ú	<genexpr>¸  r   z6CompressObjectTestCase.test_flushes.<locals>.<genexpr>Ú.)r   rr   é   r_   ÚZ_BLOCKc                 S   s    g | ]}t t|ƒrtt|ƒ‘qS r   )Úhasattrr   Úgetattr)r¼   Úoptr   r   r   Ú
<listcomp>½  s   
ÿz7CompressObjectTestCase.test_flushes.<locals>.<listcomp>é   r3   i¸  z!Error for flush mode={}, level={}r   z*Decompress failed: flush mode=%i, level=%i)Útupler   r
   Úsplitrš   r[   r™   r@   r6   rG   ÚprintÚformatr	   r<   r›   )r   Zsync_optÚverr0   Úsyncr`   ÚobjÚaÚbÚcÚdr   r   r   Útest_flushes²  s2    


ÿÿÿz#CompressObjectTestCase.test_flushesr¸   zrequires zlib.Z_SYNC_FLUSHc           	      C   sª   dd l }t tj¡}t ¡ }z| ¡ }W n6 ty^   z| ¡ }W n tyX   |}Y n0 Y n0 | d¡ | 	d¡}| 
|¡}| tj¡}| || ¡}|  ||d¡ d S )Nr   r   i D  z17K random source doesn't match)rQ   r   r@   ÚZ_BEST_COMPRESSIONrE   ZWichmannHillÚAttributeErrorÚRandomÚseedrR   r6   rG   r¸   r<   r	   )	r   rQ   r…   rˆ   Úgenr0   ÚfirstÚsecondZexpandedr   r   r   Útest_odd_flushÒ  s     


z%CompressObjectTestCase.test_odd_flushc                 C   s6   t  t j¡}|  | ¡ ¡ t  ¡ }|  | ¡ d¡ d S )Nr   )r   r@   rÓ   r   rG   rE   r	   )r   r…   rˆ   r   r   r   Útest_empty_flushô  s    z'CompressObjectTestCase.test_empty_flushc                 C   s‚   t }| ¡ }t |¡ d |¡}tj|d}| |¡| ¡  }tj	|d}|  
| |¡| ¡  |¡ t 	¡ }|  tj|j|¡ d S )Nr   ©r‘   )r[   rÈ   rQ   Úshuffler›   r   r@   r6   rG   rE   r	   r<   r4   r5   )r   ÚhÚwordsr‘   r…   Zcdrˆ   r   r   r   Útest_dictionaryþ  s    

z&CompressObjectTestCase.test_dictionaryc                 C   sÀ   t jtd}t jtd}tdd… }| |¡| t j¡ }| |dd … ¡| t j¡ }| |d d… ¡| t j¡ }|  | |¡|¡ |  | |¡|dd … ¡ |  | |¡|d d… ¡ d S )NrÜ   éè  iÜ  rz   iœÿÿÿ)	r   r@   r[   rE   r6   rG   r¸   r	   r<   )r   r…   r•   ZpieceÚd0Úd1Zd2r   r   r   Útest_dictionary_streaming  s    z0CompressObjectTestCase.test_dictionary_streamingc                 C   sf   d}|   t |¡d¡ |  tjtj|d d… ¡ t ¡ }| |d d… ¡}|| ¡ 7 }|   |d¡ d S )Nó   xœKËÏ ‚Es   fooéûÿÿÿ)r	   r   r<   r4   r5   rE   rG   )r   r]   rˆ   r–   r   r   r   Ú!test_decompress_incomplete_stream  s    z8CompressObjectTestCase.test_decompress_incomplete_streamc                 C   sl   d}t  ¡ }|  |j¡ | |d d… ¡ |  |j¡ | |dd … ¡ |  |j¡ | ¡  |  |j¡ d S ©Nrå   ræ   )r   rE   r¬   Úeofr<   r   rG   ©r   r]   rˆ   r   r   r   Útest_decompress_eof(  s    z*CompressObjectTestCase.test_decompress_eofc                 C   sN   d}t  ¡ }|  |j¡ | |d d… ¡ |  |j¡ | ¡  |  |j¡ d S rè   )r   rE   r¬   ré   r<   rG   rê   r   r   r   Ú%test_decompress_eof_incomplete_stream3  s    z<CompressObjectTestCase.test_decompress_eof_incomplete_streamc           
      C   s  d}d}t  |¡}|| }dD ]î}ddt|ƒt|ƒfD ]Ô}t  ¡ }d}tdt|ƒ|ƒD ]r}	|	t|ƒk rt|  |jd¡ |dkr¦|| ||	|	| … ¡7 }|  |jd¡ qV|| |j||	|	| …  |¡7 }qV|| 	¡ 7 }|  
|j¡ |  ||¡ |  |jd¡ |  |j|¡ q6qd S )Nó   abcdefghijklmnopqrstuvwxyzs
   0123456789)r   rá   r   rr   r   r   )r   r6   rS   rE   r™   r	   r„   r<   r‚   rG   r   ré   )
r   r¡   Ú	remainderr–   r]   ÚmaxlenÚsteprˆ   r0   r   r   r   r   Útest_decompress_unused_data<  s,    
ÿz2CompressObjectTestCase.test_decompress_unused_datac                 C   s\   d}t jt j |d}| |¡| ¡  }t jt j |d}| |¡| ¡  }|  ||¡ d S )Nrí   r’   )r   r@   rB   r6   rG   rE   r<   r	   )r   r‘   r…   r|   rˆ   Úuncompr   r   r   Ú#test_decompress_raw_with_dictionaryW  s    z:CompressObjectTestCase.test_decompress_raw_with_dictionaryc                 C   sN   d}d}t  |¡}t  ¡ }| |d¡ ~t  |¡}|  | ¡ |dd … ¡ d S )Nrí   s   QWERTYUIOPASDFGHJKLZXCVBNMr   )r   r6   rE   r<   r	   rG   )r   Zinput1Zinput2r0   rˆ   r   r   r   Útest_flush_with_freed_input_  s    

z2CompressObjectTestCase.test_flush_with_freed_inputr   rk   c                 C   sF   t d }t |d¡}t ¡ }| |d¡ |  | |¡|dd … ¡ d S r²   )r[   r   r6   rE   r<   r	   rG   )r   r-   Úinputr0   rˆ   r   r   r   Útest_flush_large_lengthk  s
    z.CompressObjectTestCase.test_flush_large_lengthc                 C   sH   t d }t |d¡}t ¡ }| |d¡ |  | tƒ ¡|dd … ¡ d S r²   )r[   r   r6   rE   r<   r	   rG   rv   )r   rõ   r0   rˆ   r   r   r   Útest_flush_custom_lengtht  s
    z/CompressObjectTestCase.test_flush_custom_lengthc           
      C   sä   t }ttt dƒ ¡ dƒ}dd„ tjtjfD ]´}t tj¡}g }| 	| 
|¡¡ ||ƒ}|d d … }| 	| 
|¡¡ | 	| ¡ ¡ d |¡}| 	| 
|¡¡ | 	| ¡ ¡ d |¡}	|  t |¡|| ¡ |  t |	¡|| ¡ q*d S )NÚasciic                 S   s   |   ¡ S rZ   ©r   ©rÐ   r   r   r   ro   €  r   z:CompressObjectTestCase.test_compresscopy.<locals>.<lambda>r   )r[   rƒ   ÚstrÚswapcaser   Údeepcopyr   r@   rÓ   rš   r6   rG   r›   r	   r<   )
r   Zdata0Zdata1ÚfuncZc0Úbufs0Úc1Úbufs1Ús0Ús1r   r   r   Útest_compresscopy{  s     

z(CompressObjectTestCase.test_compresscopyc                 C   sL   t  ¡ }| t¡ | ¡  |  t|j¡ |  ttj|¡ |  ttj|¡ d S rZ   )	r   r@   r6   r[   rG   r4   r?   r   rý   )r   rÐ   r   r   r   Útest_badcompresscopy“  s    
z+CompressObjectTestCase.test_badcompresscopyc           
      C   sÊ   t }t |¡}|  |t¡ dd„ tjtjfD ]˜}t ¡ }g }| | 	|d d… ¡¡ ||ƒ}|d d … }| | 	|dd … ¡¡ d 
|¡}| | 	|dd … ¡¡ d 
|¡}	|  ||	¡ |  ||¡ q,d S )Nc                 S   s   |   ¡ S rZ   rù   rú   r   r   r   ro   ¥  r   z<CompressObjectTestCase.test_decompresscopy.<locals>.<lambda>é    r   )r[   r   r6   r   rƒ   r   rý   rE   rš   r<   r›   r	   )
r   r0   r|   rþ   râ   rÿ   rã   r  r  r  r   r   r   Útest_decompresscopy  s    


z*CompressObjectTestCase.test_decompresscopyc                 C   sV   t  t¡}t  ¡ }| |¡ | ¡  |  t|j¡ |  ttj|¡ |  ttj	|¡ d S rZ   )
r   r6   r[   rE   r<   rG   r4   r?   r   rý   )r   r0   rÑ   r   r   r   Útest_baddecompresscopy¶  s    

z-CompressObjectTestCase.test_baddecompresscopyc              	   C   s\   t tjd ƒD ]H}|  ttjf¡$ t t tj	¡|¡ W d   ƒ q1 sL0    Y  qd S rl   )
r™   ÚpickleÚHIGHEST_PROTOCOLr4   r;   ÚPicklingErrorÚdumpsr   r@   rÓ   ©r   Úprotor   r   r   Útest_compresspickleÁ  s    z*CompressObjectTestCase.test_compresspicklec              	   C   sX   t tjd ƒD ]D}|  ttjf¡  t t ¡ |¡ W d   ƒ q1 sH0    Y  qd S rl   )	r™   r	  r
  r4   r;   r  r  r   rE   r  r   r   r   Útest_decompresspickleÆ  s    z,CompressObjectTestCase.test_decompresspicklerP   r_   c                    s&   t  d¡‰ ‡ fdd„}|  ||¡ d S )Nr   c                    s   ˆ   | ¡ˆ  ¡  S rZ   )r6   rG   rm   rú   r   r   ro   Ð  r   zACompressObjectTestCase.test_big_compress_buffer.<locals>.<lambda>)r   r@   rT   rp   r   rú   r   rq   Í  s    
z/CompressObjectTestCase.test_big_compress_bufferrr   c                    s$   t  ¡ ‰ ‡ fdd„}|  ||¡ d S )Nc                    s   ˆ   | ¡ˆ  ¡  S rZ   )r<   rG   rm   ©rÑ   r   r   ro   Ö  r   zCCompressObjectTestCase.test_big_decompress_buffer.<locals>.<lambda>)r   rE   rX   )r   r-   r<   r   r  r   rs   Ó  s    z1CompressObjectTestCase.test_big_decompress_bufferrx   ry   rz   r,   c                 C   sn   d| }t  d¡}t  ¡ }z@| |¡| ¡  }| |¡| ¡  }|  ||¡ W d  } }}nd  } }}0 d S r{   )r   r@   rE   r6   rG   r<   r	   )r   r-   r0   r…   r•   r|   rò   r   r   r   r}   Ù  s    
z*CompressObjectTestCase.test_64bit_compressc                 C   sr   d}d| }t  |¡| }t  ¡ }z<| |¡| ¡  }|  ||j¡ |  ||¡ W d  } }}nd  } }}0 d S )Nr#   rU   )r   r6   rE   r<   rG   r	   r„   )r   r-   r0   Zunusedr|   r•   rò   r   r   r   Útest_large_unused_dataæ  s    z-CompressObjectTestCase.test_large_unused_datarÀ   c                 C   sn   d| }t  ¡ }zJt  |d¡}| |d¡| ¡  }|  ||¡ |  |jd¡ W d  } }}nd  } }}0 d S )NrU   r   r   r   )r   rE   r6   r<   rG   r	   r‚   )r   r-   r0   r•   r|   rò   r   r   r   Útest_large_unconsumed_tailô  s    z1CompressObjectTestCase.test_large_unconsumed_tailc           
      C   s  t j dd¡d  d¡}t|ƒdk r0| d¡ n|d  ¡ sDd|d< ttt|ƒƒ}|dk}t j	dd	d
}| 
t¡| ¡  }|  t  |d	¡t¡ |r¦|  t  |d¡t¡ |  t  |d¡t¡ |  t jd¡ t  |d¡ W d   ƒ n1 sê0    Y  t jdd}|  | |¡t¡ t jdd}|  t jd¡ | |¡ W d   ƒ n1 sN0    Y  t j	ddd
}| 
t¡| ¡  }|  t  |d¡t¡ |  t  |d	¡t¡ |rº|  t  |d¡t¡ |  t  |d¡t¡ t jdd}|  | |¡t¡ t j	ddd
}| 
t¡| ¡  }|  t  |d¡t¡ t jdd}|  | |¡t¡ t j	ddd
}| 
t¡| ¡  }|  t  |d¡t¡ |  t  |d¡t¡ t jdd}|  | |¡t¡ t j	ddd
}| 
t¡| ¡  }	|  t  |	d¡t¡ |  t  |	d¡t¡ t  d¡}|  | |	¡t¡ d S )Nú-r   r   r¿   r,   Ú0rD   )r   rr   r_   rÀ   rI   )r`   ra   é/   zinvalid window sizeé   )ra   r   é)   iñÿÿÿi÷ÿÿÿé   )r   r
   rÈ   rS   rš   Ú	isnumericrÇ   Úmapr»   r@   r6   r[   rG   r	   r<   rJ   r5   rE   )
r   r½   Zsupports_wbits_0r…   Zzlib15rˆ   Zzlib9Z	deflate15Zdeflate9Úgzipr   r   r   Ú
test_wbits  s\    **
z!CompressObjectTestCase.test_wbits)FNr˜   r    )Nr˜   r    )F)4r   r   r   r‹   rd   r—   rŸ   r¥   r§   r®   r¯   r°   r±   r´   rµ   r¶   rÒ   r~   r   rÂ   r   rÚ   rÛ   rà   rä   rç   rë   rì   rñ   ró   rô   r   r   rö   r÷   Úrequires_Compress_copyr  r  Úrequires_Decompress_copyr  r  r  r  r   rq   rs   rL   rM   r}   r  r  r  r   r   r   r   r€   â   sl   
)

 		 ÿ
 
	



	




r€   c                    s4   |durˆ   |¡ |  d¡‰‡ ‡fdd„t|ƒD ƒS )z=Return a list of number lines randomly chosen from the sourceNÚ
c                    s   g | ]}ˆ   ˆ¡‘qS r   )Úchoice)r¼   Ún©Ú	generatorZsourcesr   r   rÅ   @  r   z choose_lines.<locals>.<listcomp>)rÖ   rÈ   r™   )r¡   ZnumberrÖ   r$  r   r#  r   Úchoose_lines;  s    

r%  s  
LAERTES

       O, fear me not.
       I stay too long: but here my father comes.

       Enter POLONIUS

       A double blessing is a double grace,
       Occasion smiles upon a second leave.

LORD POLONIUS

       Yet here, Laertes! aboard, aboard, for shame!
       The wind sits in the shoulder of your sail,
       And you are stay'd for. There; my blessing with thee!
       And these few precepts in thy memory
       See thou character. Give thy thoughts no tongue,
       Nor any unproportioned thought his act.
       Be thou familiar, but by no means vulgar.
       Those friends thou hast, and their adoption tried,
       Grapple them to thy soul with hoops of steel;
       But do not dull thy palm with entertainment
       Of each new-hatch'd, unfledged comrade. Beware
       Of entrance to a quarrel, but being in,
       Bear't that the opposed may beware of thee.
       Give every man thy ear, but few thy voice;
       Take each man's censure, but reserve thy judgment.
       Costly thy habit as thy purse can buy,
       But not express'd in fancy; rich, not gaudy;
       For the apparel oft proclaims the man,
       And they in France of the best rank and station
       Are of a most select and generous chief in that.
       Neither a borrower nor a lender be;
       For loan oft loses both itself and friend,
       And borrowing dulls the edge of husbandry.
       This above all: to thine ownself be true,
       And it must follow, as the night the day,
       Thou canst not then be false to any man.
       Farewell: my blessing season this in thee!

LAERTES

       Most humbly do I take my leave, my lord.

LORD POLONIUS

       The time invites you; go; your servants tend.

LAERTES

       Farewell, Ophelia; and remember well
       What I have said to you.

OPHELIA

       'Tis in my memory lock'd,
       And you yourself shall keep the key of it.

LAERTES

       Farewell.
c                   @   s   e Zd Zdd„ ZdS )rv   c                 C   s   dS )Nrz   r   r   r   r   r   Ú	__index__…  s    zCustomInt.__index__N)r   r   r   r&  r   r   r   r   rv   „  s   rv   Ú__main__)"r~   Útestr   r(   r   r	  rQ   rL   Ztest.supportr   r   r   Úimport_moduler   r   rÂ   r@   r  rE   r  ZTestCaser   r   r+   r2   ÚobjectrO   rY   r€   r%  r[   rv   r   Úmainr   r   r   r   Ú<module>   s@   
þþ.	-A    ]A
