B
    ™i‚\û  ã               @   s  d Z ddlm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mZm	Z	m
Z
mZmZ ddlmZ ddlmZ ddlmZ dd	lmZ d
ZG dd„ dejƒZG dd„ deƒZG dd„ deejeƒZG dd„ deejeƒZdd„ Zedkre ej ¡ e !¡  ej"dd dS )zGThis test unit checks control of dataset timestamps with track_times.

é    )Úprint_function)Úabsolute_importN)Ú
StringAtomÚ	Int16AtomÚ	StringColÚIntColÚInt16Col)Úcommon)Úunittest)ÚPyTablesTestCase)ÚrangeZ 2aafb84ab739bb4ae61d2939dc010bfdc               @   s"   e Zd ZeddZeƒ Zeƒ ZdS )ÚRecordé   )ÚitemsizeN)	Ú__name__Ú
__module__Ú__qualname__r   Úvar1r   Úvar2r   Úvar3© r   r   ú;lib/python3.7/site-packages/tables/tests/test_timestamps.pyr      s   
r   c               @   s   e Zd Zdd„ ZdS )ÚTrackTimesMixinc          	   C   sJ  | j j|d |¡t| jd |d}|j}x@t| jƒD ]2}d| j|  |d< ||d< |d |d< | ¡  q2W | 	¡  dd	„ | 
¡ D ƒ}d
d	„ | 
¡ D ƒ}| j j|d |¡|d |¡|d | j j|d |¡|d |d ¡|d | j j|d |¡tdddd |d ¡|d}	|	 |¡ | j j|d |¡tƒ d |d ¡|d}
|
 |¡ d S )Nztable{})ÚtitleÚfiltersÚtrack_timesz%04dr   r   é   r   c             S   s   g | ]}|d  ‘qS )r   r   )Ú.0Úxr   r   r   ú
<listcomp>3   s    z1TrackTimesMixin._add_datasets.<locals>.<listcomp>c             S   s   g | ]}|d  ‘qS )r   r   )r   r   r   r   r   r   4   s    zarray{}zcol {})r   zcarray{})ÚnameÚobjr   r   zearray{}r   )r   )r   z	vlarray{}é   )Úh5fileZcreate_tableÚformatr   r   Úrowr   ÚnrowsÚappendÚflushZiterrowsZcreate_arrayZcreate_carrayZcreate_earrayr   Zcreate_vlarrayr   )ÚselfÚgroupÚjr   ÚtableÚdÚiZvar1ListZvar3ListZeaZvlar   r   r   Ú_add_datasets    s>    


zTrackTimesMixin._add_datasetsN)r   r   r   r/   r   r   r   r   r      s   r   c                   s4   e Zd ZdZdZ‡ fdd„Zdd„ Zdd„ Z‡  ZS )	ÚTimestampTestCasezA titleé
   c                s   t t| ƒ ¡  |  ¡  d S )N)Úsuperr0   ÚsetUpÚpopulateFile)r)   )Ú	__class__r   r   r3   U   s    zTimestampTestCase.setUpc             C   s8   | j j}x*tdƒD ]}t|d ƒ}|  |||¡ qW d S )Nr   r   )r#   Úrootr   Úboolr/   )r)   r*   r+   r   r   r   r   r4   Y   s    zTimestampTestCase.populateFilec             C   sÎ   xÈdD ]À}g }x t dƒD ]”}t|d ƒ}| |¡}| j |¡}|  |j|¡ | ¡ }|  |jd¡ |  |j	d¡ |  |j
d¡ |s’|  |jd¡ q|  |jd¡ | |j¡ qW |  |d |d k¡ qW dS )z Checking retrieval of timestamps)z/table{}z/array{}z	/carray{}z	/earray{}z
/vlarray{}r   r   r   é   N)r   r7   r$   r#   Zget_nodeÚassertEqualr   Z_get_obj_timestampsZatimeÚmtimeZbtimeZctimeÚassertNotEqualr'   Z
assertTrue)r)   ÚpatternZtracked_ctimesr+   r   Znoder!   Z
timestampsr   r   r   Útest00_checkTimestamps_   s     
	
z(TimestampTestCase.test00_checkTimestamps)	r   r   r   r   r&   r3   r4   r=   Ú__classcell__r   r   )r5   r   r0   Q   s
   r0   c               @   s,   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	S )
ÚBitForBitTestCasezA titler1   c             C   s@   | j  ¡  tj| jdd| _ | j j}|  |d|¡ | j  ¡  d S )NÚw)Úmoder8   )r#   ÚcloseÚtablesZ	open_fileÚh5fnamer6   r/   )r)   r   r*   r   r   r   ÚrepopulateFile‚   s
    
z BitForBitTestCase.repopulateFilec             C   sž   | j dd |  | j¡}| j dd |  | j¡}t d¡ | j dd |  | j¡}| j dd |  | j¡}|  t|¡ |  ||¡ |  ||¡ |  ||¡ dS )z8Checking bit-for-bit reproducibility with no track_timesF)r   Tr8   N)rE   Ú_get_digestrD   ÚtimeZsleepr9   Ú	HEXDIGESTr;   )r)   Zhexdigest_wo_track_1Zhexdigest_w_track_1Zhexdigest_w_track_2Zhexdigest_wo_track_2r   r   r   Útest00_checkReproducibility‰   s    
z-BitForBitTestCase.test00_checkReproducibilityc             C   s>   t  ¡ }t|dƒ}x|D ]}| |¡ qW | ¡  | ¡ }|S )NÚrb)ÚhashlibÚmd5ÚopenÚupdaterB   Ú	hexdigest)r)   ÚfilenamerL   ÚfdÚdatarO   r   r   r   rF   š   s    

zBitForBitTestCase._get_digestN)r   r   r   r   r&   rE   rI   rF   r   r   r   r   r?   ~   s
   r?   c              C   sB   t  ¡ } d}x0t|ƒD ]$}|  t  t¡¡ |  t  t¡¡ qW | S )Nr8   )r
   Z	TestSuiter   ZaddTestZ	makeSuiter0   r?   )ZtheSuiteZniterr.   r   r   r   Úsuite¨   s    rS   Ú__main__)ZdefaultTest)#Ú__doc__Z
__future__r   r   rK   ÚsysrG   rC   r   r   r   r   r   Ztables.testsr	   Ztables.tests.commonr
   r   ZTestCaseZ	six.movesr   rH   ZIsDescriptionr   Úobjectr   ZTempFileMixinr0   r?   rS   r   Z
parse_argvÚargvZprint_versionsÚmainr   r   r   r   Ú<module>   s*   2-*
