B
    5b&                 @   s   d 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 ZG dd dej	Z
G dd dej	Zd	d
 Zdd ZedkrddlZddlZe Zejdddddd e Zeeejdrdnd dS )zProvides tests     Nc             C   s"   t j|  }| t jjkp tj|S )z1Returns True if the given filter should be tested)
hdf5pluginFILTERSconfigembedded_filtersh5pyZh5zZfilter_avail)filter_nameZ	filter_id r   .lib/python3.7/site-packages/hdf5plugin/test.pyshould_test#   s    
r
   c               @   s   e Zd ZdZedd Zedd ZejddfddZ	e
ed	d
dd Ze
edddd Ze
edddd Ze
edddd Ze
edddd Ze
edddd  Zd!S )"TestHDF5PluginRWz,Test write/read a HDF5 file with the pluginsc             C   s   t  | _d S )N)tempfileZmkdtemptempdir)clsr   r   r	   
setUpClass,   s    zTestHDF5PluginRW.setUpClassc             C   s   t | j d S )N)shutilZrmtreer   )r   r   r   r	   tearDownClass0   s    zTestHDF5PluginRW.tearDownClassTc          	      s  t jd|ddd}tj| jd| d }tjtj	tj
tjtjtjd| f |}t|d}	|	jd||jd
| |	  t|d}	|	d	 d }
|	d	 j   fddt  D }tjjdkr|	d	 jd|j d }|r| t||j n| t||j W dQ R X |r<| t  |
| n| t !|
| | |
j"|j" | t|d | |d d tj#|  t$| |d S )zRun test for a particular filter

        :param str filter_name: The name of the filter to use
        :param Union[None,tuple(int)] options:
            create_dataset's compression_opts argument
        :return: The tuple describing the filter
        )i  )dtyped   
   Ztest_z.h5)bloscbshuflz4	fcidecompzfpzstdwdata)r   Zchunksrr   c                s   g | ]}  |qS r   )Z
get_filter).0i)plistr   r	   
<listcomp>U   s    z*TestHDF5PluginRW._test.<locals>.<listcomp>)   r   )r      Nr   )r   )%numpyZonesZreshapeospathjoinr   r   BloscZ
BitshuffleZLZ4Z	FciDecompZZfpZZstdr   ZFileZcreate_datasetshapecloseidZget_create_plistrangeZget_nfiltersversionZversion_tupleZread_direct_chunkndimZ
assertLesslennbytesassertEqualZ
assertTrueZarray_equalZallcloser   r   remove)selfr   r   lossless
compressedoptionsr   filenameargsfZsavedfilterschunkr   )r    r	   _test4   s:    
zTestHDF5PluginRW._testr   zBitshuffle filter not availablec             C   s   |  d xdD ]}x~tjtjtjtjfD ]f}x`dD ]X}| j|||d> | j d||||d}| |d dd ||rzdnd	f W dQ R X q4W q*W qW dS )
z-Write/read test with bitshuffle filter pluginr   )FT)i   i   )r   r   nelems)r5   r=   r   r"      Nr   )r<   r$   int8int16int32Zint64subTestr1   )r3   r   r   r=   filter_r   r   r	   testBitshufflel   s    


zTestHDF5PluginRW.testBitshuffler   zBlosc filter not availablec             C   s   |  d tjjtjjtjjf}d}xt|D ]\}}x|D ]}x|tdD ]p}| j|||dV |dkrztj	j
sz| d | j d|dk|||d}| |d	 d
d |||f W dQ R X qJW q<W q.W dS )z(Write/read test with blosc filter pluginr   )Zblosclzr   Zlz4hcsnappyzlibr   r   )ZcompressionshuffleclevelrE   z snappy unavailable without C++11r   )r5   cnamerH   rG   r"      N)r<   r   r(   Z	NOSHUFFLEZSHUFFLEZ
BITSHUFFLE	enumerater,   rB   r   cpp11ZskipTestr1   )r3   ZshufflescompressZcompression_idrI   rG   rH   rC   r   r   r	   	testBloscy   s*    




zTestHDF5PluginRW.testBloscr   zLZ4 filter not availablec             C   s,   |  d | j ddd}| |d d dS )z&Write/read test with lz4 filter pluginr   i   )r0   r"   )i   N)r<   r1   )r3   rC   r   r   r	   testLZ4   s    
zTestHDF5PluginRW.testLZ4r   zFCIDECOMP filter not availablec          
   C   sH   xBt jt jt jt jfD ]*}| j|d | jd|d W dQ R X qW dS )z,Write/read test with fcidecomp filter plugin)r   r   N)r$   Zuint8Zuint16r?   r@   rB   r<   )r3   r   r   r   r	   testFciDecomp   s    zTestHDF5PluginRW.testFciDecompr   zZFP filter not availablec             C   s   ddidddddddddd	d	d
ddddddg}xP|D ]H}xBt jt jfD ]2}| j||d | jdd|i| W dQ R X qPW q>W | jdt jd	d dS )z&Write/read test with zfp filter pluginr4   Fg      $@)r4   Zrater   )r4   Z	precisiong:0yE>)r4   ZaccuracyT)r4   
reversibler#   iA  @   i)r4   ZminbitsZmaxbitsZmaxprecZminexp)r6   r   r   r   N)r   rQ   )r   )r$   float32float64rB   r<   rA   )r3   testsr6   r   r   r   r	   testZfp   s    
&zTestHDF5PluginRW.testZfpr   zZstd filter not availablec             C   sp   |  d ddiddig}xP|D ]H}xBtjtjfD ]2}| j||d | j dd|i| W dQ R X q2W q W dS )	z'Write/read test with Zstd filter pluginr   rH   r>      )r6   r   r   N)r   )r<   r$   rS   rT   rB   )r3   rU   r6   r   r   r   r	   testZstd   s    


zTestHDF5PluginRW.testZstdN)__name__
__module____qualname____doc__classmethodr   r   r$   rA   r<   unittestZ
skipUnlessr
   rD   rN   rO   rP   rV   rX   r   r   r   r	   r   )   s   4	r   c               @   s    e Zd ZdZdd Zdd ZdS )TestPackagez/Test general features of the hdf5plugin packagec             C   s^   t j}| |jt | |jt | |jt | |jt | |jt | |j	t
 dS )z#Test hdf5plugin.config availabilityN)r   r   assertIsInstanceZopenmpboolZnativeZsse2Zavx2rL   r   tuple)r3   r   r   r   r	   
testConfig   s    zTestPackage.testConfigc             C   sz   |  tjt |  tjt |  tjt tj}|  |jt |  |j	t |  |j
t |  |jt |  |jt dS )zTest version informationN)r`   r   r-   strZstrictversion
hexversionintversion_infomajorminormicroreleaselevelserial)r3   rg   r   r   r	   testVersion   s    zTestPackage.testVersionN)rY   rZ   r[   r\   rc   rm   r   r   r   r	   r_      s   
r_   c              C   s2   t  } x$ttfD ]}| t  | qW | S )N)r^   Z	TestSuiter   r_   ZaddTestZ
TestLoaderZloadTestsFromTestCase)Z
test_suiter   r   r   r	   suite   s    rn   c              O   s4   t j| |}|t  }td|r(dnd  |S )zRun test complete test_suitezTest suite Z	succeededZfailed)r^   ZTextTestRunnerrunrn   ZwasSuccessfulprint)r8   kwargsZrunnerZsuccessr   r   r	   	run_tests   s    rr   __main__z	--verbosez-vcountr#   zIncrease verbosity)actiondefaulthelp)	verbosity)r\   r%   r   r   r^   r$   r   r   r
   ZTestCaser   r_   rn   rr   rY   argparsesysArgumentParserparseradd_argument
parse_argsr6   exitverboser   r   r   r	   <module>   s(    