U
    Hvf                     @   s   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	Z
ddlmZmZ ddlmZ ddlmZmZmZmZmZmZ ed	d
 Zdd Zdd Zdd ZG dd dZdS )z
 Testing

    N)BytesIO)mkstemp)contextmanager)assert_assert_equal)raises)make_streamGenericStreamZlibInputStream
_read_into_read_string
BLOCK_SIZEc               	   c   sp   d} t  \}}t|d}||  W 5 Q R X t|d"}t| }t| }|||fV  W 5 Q R X t| d S )N   a stringwbrb)r   osfdopenwriteopenr   unlink)valfdfnamefsgscs r   F/tmp/pip-unpacked-wheel-96ln3f52/scipy/io/matlab/tests/test_streams.pysetup_test_file   s    
r   c               	   C   s.   t  \} }}ttt|t W 5 Q R X d S )N)r   r   
isinstancer   r	   )r   r   r   r   r   r   test_make_stream&   s    r    c               	   C   s   t  \} }}| ||fD ]}t|}|d}t|d t| d |d}t|d t| d |dd}t|d t| d |dd}t|d t| d qW 5 Q R X d S )Nr                  )r   r   seekr   tellr   r   r   sstresr   r   r   test_tell_seek,   s    





r-   c               	   C   s   t  \} }}| ||fD ]}t|}|d |d}t|d |d |d}t|d |d t|d}t|d t|d}t|d ttt|d |d t|d}t|d t|d}t|d ttt|d qW 5 Q R X d S )Nr   r      s   a sts   ringr"   )	r   r   r'   readr   r   assert_raisesOSErrorr   r)   r   r   r   	test_read>   s*    















r3   c                   @   sT   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S )TestZlibInputStreamc                 C   s<   t jdd|t j }t|}t|}|t	||fS )Nr      )
nprandomrandintastypeuint8tobyteszlibcompressr   len)selfsizedatacompressed_datastreamr   r   r   	_get_dataY   s    
zTestZlibInputStream._get_datac              	      sn   dddt d t d t t d dt  d g}t d t d t t d g} fdd}|D ]}|D ]}||| qXqPd S )Nr   r#   
   r"   c           	         s`     | \}}}t||}d}d}|t|| | }|s<qR|t|7 }||7 }q"t|| d S )N    r   )rD   r
   r0   minr>   r   )	r@   	read_sizecompressed_streamcompressed_data_lenrA   rC   Zdata2Zso_farblockr?   r   r   checkf   s    

z,TestZlibInputStream.test_read.<locals>.check)r   )r?   ZSIZESZ
READ_SIZESrM   r@   rH   r   rL   r   r3   _   s      
 zTestZlibInputStream.test_readc                 C   sv   d}t jdd|t j }t|}t|d }t	|t
|}|t
| t| t
| tt|jd d S )Ni  r   r5   s   abbacacar#   )r6   r7   r8   r9   r:   r;   r<   r=   r   r
   r>   r0   r   r(   r1   r2   )r?   r@   rA   rB   rI   rC   r   r   r   test_read_max_lengthx   s    
z(TestZlibInputStream.test_read_max_lengthc                 C   sv   t jdddt j }t|}|d d t|d d d@ g }t	|}t
|t|}ttj|jt| d S Nr   r5   rE   r.   r#      )r6   r7   r8   r9   r:   r;   r<   r=   bytesr   r
   r>   r1   errorr0   r?   rA   rB   rI   rC   r   r   r   test_read_bad_checksum   s    
"z*TestZlibInputStream.test_read_bad_checksumc           	      C   s   |  d\}}}t||}|d d}t| | |d}t||||d   |dd d}t| | |d}t||||d   |dd	 d}t| | |d}t||||d   tt|jd
d tt|jdd tt|jdd |dd tt|jd d S )N   {      iA  r#   i     i  r   rE   r"   r.   i'     )	rD   r
   r'   r   r(   r0   r1   r2   
ValueError)	r?   rI   rJ   rA   rC   pd1Zd2Zd3r   r   r   	test_seek   s,    




zTestZlibInputStream.test_seekc                 C   sv   t jdddt j }t|}|d d t|d d d@ g }t	|}t
|t|}ttj|jt| d S rO   )r6   r7   r8   r9   r:   r;   r<   r=   rQ   r   r
   r>   r1   rR   r'   rS   r   r   r   test_seek_bad_checksum   s    
"z*TestZlibInputStream.test_seek_bad_checksumc                 C   sZ   |  d\}}}t||}t|   |d t|   |d t|  d S )NrU   i   )rD   r
   r   all_data_readr'   )r?   rI   rJ   rA   rC   r   r   r   test_all_data_read   s    


z&TestZlibInputStream.test_all_data_readc                 C   s|   d}t dt j }t||}t|}t|t	d k t
|}t||}t|   |t| t|  d S )Nr&   Sr"   )r6   aranger9   r:   r;   r<   r=   r>   r   r   r   r
   r_   r'   r?   ZCOMPRESSION_LEVELrA   rB   rJ   rI   rC   r   r   r   test_all_data_read_overlap   s    
z.TestZlibInputStream.test_all_data_read_overlapc                 C   s   d}t dt j }t||}t|}t|t	d k |d d t
|d d d@ g }t|}t||}t|   |t| ttj|j d S )Nr&   ra   r"   r.   r#   rP   )r6   rb   r9   r:   r;   r<   r=   r>   r   r   rQ   r   r
   r_   r'   r1   rR   rc   r   r   r   test_all_data_read_bad_checksum   s    "
z3TestZlibInputStream.test_all_data_read_bad_checksumN)__name__
__module____qualname__rD   r3   rN   rT   r]   r^   r`   rd   re   r   r   r   r   r4   X   s   	r4   )__doc__r   r<   ior   tempfiler   
contextlibr   Znumpyr6   Znumpy.testingr   r   Zpytestr   r1   Zscipy.io.matlab._streamsr   r	   r
   r   r   r   r   r    r-   r3   r4   r   r   r   r   <module>   s    
