o
    b¦µiv  ã                   @   sp   d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlZd dl	Z	d dl	m
Z ddlmZ G dd„ deƒZdS )é    N)ÚSkipTest)Ú_objectsé   )ÚTestCasec                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestObjectsc                 C   s   t  d¡}~t  d¡}~d S )Nr   r   )ÚoÚObjectID©ÚselfÚoid© r   úK/home/ubuntu/.local/lib/python3.10/site-packages/h5py/tests/test_objects.pyÚtest_invalid   s   

zTestObjects.test_invalidc                 C   s:   t  d¡}t  d¡}t  d¡}|  ||¡ |  ||¡ d S )Né*   é+   )r   r   ÚassertEqualÚassertNotEqual)r
   Úoid1Úoid2Úoid3r   r   r   Útest_equality    s
   


zTestObjects.test_equalityc                 C   sB   t  d¡}|  t¡ t|ƒ W d   ƒ d S 1 sw   Y  d S )Nr   )r   r   ÚassertRaisesÚ	TypeErrorÚhashr	   r   r   r   Ú	test_hash)   s   

"ÿzTestObjects.test_hashc              
   C   s  t tdƒs	tdƒ‚t ¡ ó}g }tdƒD ]4}tj |d|› d¡}t 	|d¡}|j
dtj dd¡d	 W d   ƒ n1 s>w   Y  | |¡ qd
d„ }g }|D ]}tj||fd}| ¡  | |¡ qQi }t|ƒD ]\}	}t ¡ }
|
dkr||ƒ t d¡ qk|
||	< qkt ¡ }d}t ¡ || k rÏt|ƒD ]&}	||	 }
t |
tj¡\}}||
kr¾t |¡s²J ‚t |¡dks»J ‚||	= q˜|sÂnt d¡ t ¡ || k s”t|ƒdkrï| ¡ D ]\}	}
t |
tj ¡ t |
d¡ qÙJ dƒ‚|D ]}| ¡  qñW d   ƒ d S 1 sw   Y  d S )NÚforkúos.fork not availableé
   Útestz.h5ÚwÚvaluesiè  )Údatac                 S   sP   t  | d¡}tdƒD ]
}|d d d … }qW d   ƒ d S 1 s!w   Y  d S )NÚréd   r    )Úh5pyÚFileÚrange)ÚfnÚfÚ_r   r   r   r(   @   s
   ÿ"ÿz-TestObjects.test_fork_with_threads.<locals>.f)ÚtargetÚargsr   g      N@gš™™™™™¹?Fz8Some child processes did not finish and had to be killed)!ÚhasattrÚosr   ÚtempfileÚTemporaryDirectoryr&   ÚpathÚjoinr$   r%   Úcreate_datasetÚnpÚrandomÚrandÚappendÚ	threadingÚThreadÚstartÚ	enumerater   Ú_exitÚtimeÚlistÚwaitpidÚWNOHANGÚ	WIFEXITEDÚWEXITSTATUSÚsleepÚlenÚitemsÚkillÚsignalÚSIGKILL)r
   ÚtmpdirÚfnsÚir'   r(   ÚthreadsÚthreadÚ
worker2pidÚ	worker_idÚpidr9   ÚtimeoutÚ
waited_pidÚstatusr   r   r   Útest_fork_with_threads/   s^   

ÿ
€
õ
ÿ$Ãz"TestObjects.test_fork_with_threadsc                    sè   t tdƒs	tdƒ‚t ¡ ‰ ‡ fdd„}tj|d}| ¡  zQˆ  ¡  t ¡ }|dkrBt	j
jddr<t	j
 ¡  t d¡ n%t d	¡ nt |d¡\}}t |¡sQJ ‚t |¡dkshJ ‚W | ¡  d S W | ¡  d S W | ¡  d S | ¡  w )
Nr   r   c                      s:   t j ¡  zˆ  ¡  t d¡ W t j ¡  d S t j ¡  w )Nr   )r   ÚphilÚacquireÚsetr<   rB   Úreleaser   ©Úthread_acquired_phil_eventr   r   r(   …   s
   
z2TestObjects.test_phil_fork_with_threads.<locals>.f)r*   r   F)Úblockingr   )r,   r-   r   r7   ÚEventr8   r9   Úwaitr   r   rT   rU   rW   r;   r>   r@   rA   r1   )r
   r(   rL   rO   r)   rR   r   rX   r   Útest_phil_fork_with_threadsx   s.   

úö
þz'TestObjects.test_phil_fork_with_threadsN)Ú__name__Ú
__module__Ú__qualname__r   r   r   rS   r]   r   r   r   r   r      s    	Ir   )r-   rF   r.   r7   Úunittestr   Únumpyr3   r<   r$   r   r   Úcommonr   r   r   r   r   r   Ú<module>   s   