a
    =_                     @   s   d 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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reej e  ejdd dS )zGThis test unit checks control of dataset timestamps with track_times.

    N)
StringAtom	Int16Atom	StringColIntColInt16Col)common)unittest)PyTablesTestCaseZ 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.9/site-packages/tables/tests/test_timestamps.pyr
      s   
r
   c                   @   s   e Zd Zdd ZdS )TrackTimesMixinc              	   C   sF  | j j|d|t| jd |d}|j}t| jD ]2}d| j|  |d< ||d< |d |d< |  q0|	  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>0       z1TrackTimesMixin._add_datasets.<locals>.<listcomp>c                 S   s   g | ]}|d  qS )r   r   r   r   r   r   r   1   r   zarray{}zcol {}r   zcarray{})nameobjr   r   zearray{}r   r   )r   z	vlarray{}   )h5fileZcreate_tableformatr
   r   rowrange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   sH    



zTrackTimesMixin._add_datasetsN)r   r   r   r1   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 )	TimestampTestCaseA title
   c                    s   t t|   |   d S )N)superr2   setUppopulateFile)r+   	__class__r   r   r6   R   s    zTimestampTestCase.setUpc                 C   s4   | j j}tdD ]}t|d }| ||| qd S )Nr   r   )r$   rootr'   boolr1   )r+   r,   r-   r   r   r   r   r7   V   s    zTimestampTestCase.populateFilec                 C   s   dD ]}g }t dD ]}t|d }||}| j|}| |j| | }| |jd | |j	d | |j
d |s| |jd q| |jd ||j q| |d |d  qdS )z Checking retrieval of timestamps)z/table{}z/array{}z	/carray{}z	/earray{}z
/vlarray{}r   r   r      N)r'   r;   r%   r$   Zget_nodeassertEqualr   Z_get_obj_timestampsZatimemtimeZbtimectimeassertNotEqualr)   ZassertGreaterEqual)r+   patternZtracked_ctimesr-   r   Znoder"   Z
timestampsr   r   r   test00_checkTimestamps\   s     	
z(TimestampTestCase.test00_checkTimestamps)	r   r   r   r   r(   r6   r7   rB   __classcell__r   r   r8   r   r2   N   s
   r2   c                   @   s,   e Zd ZdZdZdd Zdd Zdd Zd	S )
BitForBitTestCaser3   r4   c                 C   s@   | j   tj| jdd| _ | j j}| |d| | j   d S )Nw)moder<   )r$   closetablesZ	open_fileh5fnamer:   r1   )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_timesFr    Tr<   N)rJ   _get_digestrI   timesleepr=   	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}|D ]}|| q|  | }|S )Nrb)hashlibmd5openupdaterG   	hexdigest)r+   filenamerR   fddatarU   r   r   r   rK      s    
zBitForBitTestCase._get_digestN)r   r   r   r   r(   rJ   rO   rK   r   r   r   r   rD   {   s
   rD   c                  C   s>   t  } d}t|D ]$}| t t | t t q| S )Nr<   )r   Z	TestSuiter'   ZaddTestZ	makeSuiter2   rD   )ZtheSuiteZniterr0   r   r   r   suite   s    rY   __main__)ZdefaultTest)__doc__rQ   sysrL   rH   r   r   r   r   r   Ztables.testsr   Ztables.tests.commonr   r	   ZTestCaserN   ZIsDescriptionr
   objectr   ZTempFileMixinr2   rD   rY   r   Z
parse_argvargvZprint_versionsmainr   r   r   r   <module>   s$   2-*