o
    GXhx                     @   s2  	 d dl Z d dlZd dlZd dlZd dlmZmZ d dlZd dlZd dl	Z	d dl
mZ d dlmZ eee ddZdd ZG d	d
 d
eZG dd dejZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZdS )    N)start_new_threadTIMEOUT_MAX)support)threading_helperforkz9platform doesn't support fork (no _at_fork_reinit method)c                   C   s   t d d S )N{Gz?)timesleep r
   r
   9/opt/python-3.10.19/usr/lib/python3.10/test/lock_tests.py_wait   s   r   c                   @   s0   e Zd Z	 dddZdd Zdd Zdd	 Zd
S )BunchFc                    sr   	  _ |_g _g _| _t _j   fdd}zt	|D ]}t
|d q'W d S    d_ )Nc               	      sd   t  } j|  z   W j|  js t  jrd S d S j|  js1t  jr+w N)	threading	get_identstartedappendfinished	_can_exitr   )tidfselfr
   r   task-   s   zBunch.__init__.<locals>.taskr
   T)r   nr   r   r   r   wait_threads_exitwait_thread	__enter__ranger   )r   r   r   Zwait_before_exitr   ir
   r   r   __init__   s    


zBunch.__init__c                 C   s.   t | j| jk rt  t | j| jk sd S d S r   )lenr   r   r   r   r
   r
   r   wait_for_started>   s   zBunch.wait_for_startedc                 C   s:   t | j| jk rt  t | j| jk s| jd d d  d S r   )r!   r   r   r   r   __exit__r"   r
   r
   r   wait_for_finishedB   s   zBunch.wait_for_finishedc                 C   s
   d| _ d S NT)r   r"   r
   r
   r   	do_finishH   s   
zBunch.do_finishN)F)__name__
__module____qualname__r    r#   r%   r'   r
   r
   r
   r   r      s    
r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )BaseTestCasec                 C   s   t  | _d S r   )r   Zthreading_setup_threadsr"   r
   r
   r   setUpM      zBaseTestCase.setUpc                 C   s   t j| j  t  d S r   )r   Zthreading_cleanupr,   r   reap_childrenr"   r
   r
   r   tearDownP   s   zBaseTestCase.tearDownc                 C   s$   |  ||d  | ||d  d S )Ng333333?g      $@)ZassertGreaterEqual
assertLess)r   actualZexpectedr
   r
   r   assertTimeoutT   s   zBaseTestCase.assertTimeoutN)r(   r)   r*   r-   r0   r3   r
   r
   r
   r   r+   L   s    r+   c                   @   sv   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d Zdd Zdd Zdd ZdS )BaseLockTestsc                 C   s   |   }~d S r   )locktyper   lockr
   r
   r   test_constructorb   s   zBaseLockTests.test_constructorc                 C   s   |   }| t|d ~d S )Nz<unlocked .* object (.*)?at .*>)r5   assertRegexreprr6   r
   r
   r   	test_reprf   s   zBaseLockTests.test_reprc                 C   s&   |   }|  | t|d ~d S )Nz<locked .* object (.*)?at .*>)r5   acquirer9   r:   r6   r
   r
   r   test_locked_reprk   s   zBaseLockTests.test_locked_reprc                 C      |   }|  ~d S r   )r5   r<   r6   r
   r
   r   test_acquire_destroyq      z"BaseLockTests.test_acquire_destroyc                 C   s   |   }|  |  ~d S r   r5   r<   releaser6   r
   r
   r   test_acquire_releasev   s   z"BaseLockTests.test_acquire_releasec                 C   s$   |   }| |d |  d S NF)r5   
assertTruer<   rB   r6   r
   r
   r   test_try_acquire|   s   zBaseLockTests.test_try_acquirec                    sJ   |       g  fdd}t|d  | d     d S )Nc                      s     d d S rD   r   r<   r
   r7   resultr
   r   r      s   z3BaseLockTests.test_try_acquire_contended.<locals>.f   r   )r5   r<   r   r%   assertFalserB   r   r   r
   rH   r   test_try_acquire_contended   s   z(BaseLockTests.test_try_acquire_contendedc                    sp   |       d} fdd}t||}|  t  | t|jd    |	  | t|j| d S )N   c                                d S r   r<   rB   r
   r7   r
   r   r         z/BaseLockTests.test_acquire_contended.<locals>.fr   )
r5   r<   r   r#   r   assertEqualr!   r   rB   r%   r   Nr   br
   rQ   r   test_acquire_contended   s   
z$BaseLockTests.test_acquire_contendedc                    sV   |     fdd}d fdd	}|  t|d  | t|t t|d  d S )Nc                      rO   r   rP   r
   rQ   r
   r   r      rR   z"BaseLockTests.test_with.<locals>.fc                    s6     | d ur	| W d    d S 1 sw   Y  d S r   r
   errrQ   r
   r   _with   s
   "z&BaseLockTests.test_with.<locals>._withrJ   r   )r5   r   r%   assertRaises	TypeError)r   r   rZ   r
   rQ   r   	test_with   s   zBaseLockTests.test_withc                    sd   |     fdd}tt }t|d  tt |kr0td | |tt  d S d S )Nc                      rO   r   rP   r
   rQ   r
   r   r      rR   z)BaseLockTests.test_thread_leak.<locals>.f   g?)	r5   r!   r   	enumerater   r%   r   r	   rS   )r   r   r   r
   rQ   r   test_thread_leak   s   
zBaseLockTests.test_thread_leakc                    s   |    | t jdd | jt jdd | jt jdd | jt jtd d  jtd    t }| 	 jdd t }| 
|| d g  fdd}t|d  | d	  | d d
 d S )NFrJ   itimeoutg}Ô%ITrN   c                     s4   t  }  jdd t  }||   d S )N      ?ra   )r   	monotonicr   r<   )t1t2r7   resultsr
   r   r      s   z%BaseLockTests.test_timeout.<locals>.fr   rc   )r5   r[   
ValueErrorr<   OverflowErrorr   rB   r   rd   rE   r1   r   r%   rK   r3   )r   re   rf   r   r
   rg   r   test_timeout   s    zBaseLockTests.test_timeoutc                 C   s"   |   }t|}| |  d S r   )r5   weakrefrefZassertIsNotNoner   r7   rm   r
   r
   r   test_weakref_exists   s   
z!BaseLockTests.test_weakref_existsc                 C   s,   |   }t|}~t  | |  d S r   )r5   rl   rm   gcZcollectZassertIsNonern   r
   r
   r   test_weakref_deleted   s
   
z"BaseLockTests.test_weakref_deletedN)r(   r)   r*   r8   r;   r=   r?   rC   rF   rM   rW   r]   r`   rk   ro   rq   r
   r
   r
   r   r4   ]   s    
r4   c                   @   s2   e Zd Z	 dd Zdd Zdd Zedd Zd	S )
	LockTestsc                    s   |    g  fdd}t C t|d tdkr&t  tdkst  | td    tdkrDt  tdks;| td W d    d S 1 sWw   Y  d S )Nc                      s(       d      d  d S r   r<   r   r
   r7   Zphaser
   r   r         
z#LockTests.test_reacquire.<locals>.fr
   r   rJ      )r5   r   r   r   r!   r   rS   rB   rL   r
   rt   r   test_reacquire   s    

"zLockTests.test_reacquirec                    sB   |        fdd}t|d}|        d S )Nc                             d S r   )rB   r
   rQ   r
   r   r        z*LockTests.test_different_thread.<locals>.frJ   )r5   r<   r   r%   rB   r   r   rV   r
   rQ   r   test_different_thread   s   
zLockTests.test_different_threadc                 C   sN   |   }|  | |jdd |  | |  | |jdd d S )Nr   ra   F)blocking)r5   r<   rK   rB   lockedrE   r6   r
   r
   r   test_state_after_timeout  s   z"LockTests.test_state_after_timeoutc                 C   sD   dd }|   }|  || |   }|  |  || d S )Nc                 S   s   |    |   d S r   rP   rQ   r
   r
   r   use_lock  s   z/LockTests.test_at_fork_reinit.<locals>.use_lock)r5   _at_fork_reinitr<   )r   r   r7   Zlock2r
   r
   r   test_at_fork_reinit  s   zLockTests.test_at_fork_reinitN)r(   r)   r*   rw   r{   r~   requires_forkr   r
   r
   r
   r   rr      s    
rr   c                   @   s6   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 ZdS )
RLockTestsc                 C   s<   |   }|  |  |  |  |  |  d S r   rA   r6   r
   r
   r   rw   -  s   zRLockTests.test_reacquirec                 C   sX   |   }| t|j |  |  |  |  |  |  | t|j d S r   )r5   r[   RuntimeErrorrB   r<   r6   r
   r
   r   test_release_unacquired6     z"RLockTests.test_release_unacquiredc                 C   sX   |   }| t|j |  |  |  |  |  |  | t|j d S r   )r5   r[   r   _release_saver<   rB   r6   r
   r
   r   test_release_save_unacquiredB  r   z'RLockTests.test_release_save_unacquiredc                    sR   |     fdd}t|dd}z| t j W |  n|  w |  d S )Nc                      rx   r   )r<   r
   rQ   r
   r   r   Q  ry   z+RLockTests.test_different_thread.<locals>.frJ   T)r5   r   r[   r   rB   r'   r%   rz   r
   rQ   r   r{   N  s   z RLockTests.test_different_threadc                    s   |    |       |       |    g  fdd}t|d  | d     |       |    d S )Nc                      s       d S r   )r   	_is_ownedr
   rH   r
   r   r   b  s   z$RLockTests.test__is_owned.<locals>.frJ   r   )r5   rK   r   r<   rE   r   r%   rB   rL   r
   rH   r   test__is_ownedZ  s   zRLockTests.test__is_ownedN)r(   r)   r*   rw   r   r   r{   r   r
   r
   r
   r   r   )  s    	r   c                   @   sB   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 Zedd Z	dS )
EventTestsc                 C   sr   |   }| |  |  | |  |  | |  |  | |  |  | |  d S r   )	eventtyperK   is_setsetrE   clearr   evtr
   r
   r   test_is_setq  s   zEventTests.test_is_setc                    s|   d}g g  fdd}t ||}|  t  | td    |  | dg|  | dg|  d S )NrN   c                      s            d S r   r   waitr
   r   results1results2r
   r   r     s   z#EventTests._check_notify.<locals>.fr   T)r   r#   r   rS   r!   r   r%   )r   r   rU   r   rV   r
   r   r   _check_notify}  s   
zEventTests._check_notifyc                 C   s0   |   }| | |  |  | | d S r   )r   r   r   r   r   r
   r
   r   test_notify  s
   
zEventTests.test_notifyc                    s   |    g g d} fdd}t||  | dg|  D ]\}}| | | |d q$g g    t||  | dg|  D ]	\}}| | qNd S )NrN   c                     s@     d t }  d}t } |||  f d S )Ng        rc   )r   r   r   rd   )re   rrf   r   r
   r   r     s
   
z"EventTests.test_timeout.<locals>.fFrc   T)r   r   r%   rS   rK   r3   r   rE   )r   rU   r   r   dtr
   r   r   rk     s$   
zEventTests.test_timeoutc                    sn   |    g dd} fdd}t||}|  t       |  | dg|  d S )Ng      ?rN   c                      s     d  d S N   r   r
   r   rh   rb   r
   r   r        z(EventTests.test_set_and_clear.<locals>.fT)	r   r   r#   r   r	   r   r   r%   rS   rT   r
   r   r   test_set_and_clear  s   

zEventTests.test_set_and_clearc                 C   s   |   }|j | |jd W d    n1 sw   Y  |  |j | |jd W d    d S 1 s<w   Y  d S rD   )r   _condrK   r<   r   r   r
   r
   r   r     s   "zEventTests.test_at_fork_reinitN)
r(   r)   r*   r   r   r   rk   r   r   r   r
   r
   r
   r   r   l  s    r   c                   @   sN   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S )ConditionTestsc                 C   s   |   }|  |  |  |  t }|  |}|  | |d |  | |d | |d |  | | |d W d    d S 1 sWw   Y  d S rD   )condtyper<   rB   r   LockrK   rE   )r   condr7   r
   r
   r   test_acquire  s    
"zConditionTests.test_acquirec                 C      |   }| t|j d S r   )r   r[   r   r   r   r   r
   r
   r   test_unacquired_wait     z#ConditionTests.test_unacquired_waitc                 C   r   r   )r   r[   r   notifyr   r
   r
   r   test_unacquired_notify  r   z%ConditionTests.test_unacquired_notifyc                    s  d}g g g d fdd}t ||}|  tdk r,t  tdk s#  | g      d t  d   tdk rWt  tdk sN| dgd  | g  tdk rut  tdk sl    d t  d   tt d	k rt  tt d	k s| dgd d
gd   | d
gd  tdk rt  tdk s    	  t  d   tdk rt  tdk s| dgd d
gd   | d
gd dgd   |
  d S )NrN   r   c                     sd          }    | f        }    | f d S r   )r<   r   r   rB   rI   r   	phase_numreadyr   r   r
   r   r     s   

z'ConditionTests._check_notify.<locals>.f   rJ   )TrJ   rv      )Trv   )Tr   )r   r#   r!   r   r   rS   r<   r   rB   
notify_allr%   )r   r   rU   r   rV   r
   r   r   r     sd   


zConditionTests._check_notifyc                 C   s    |   }| | | | d S r   )r   r   r   r
   r
   r   r   5  s   
zConditionTests.test_notifyc                    sd   |    g d} fdd}t||  | t| D ]\}}| |d | | q d S )NrN   c                     s@       t }  d}t }   ||  |f d S )Nrc   )r<   r   rd   r   rB   r   )re   rI   rf   r   rh   r
   r   r   ?  s   
z&ConditionTests.test_timeout.<locals>.frc   )r   r   r%   rS   r!   r3   rK   )r   rU   r   r   rI   r
   r   r   rk   ;  s   zConditionTests.test_timeoutc              	      s      d fdd}t|d}|  tdD ]!}td   d7    W d    n1 s7w   Y  q|  d S )Nr   c                     sR       fdd} |  d W d    d S 1 s"w   Y  d S )Nc                          dkS r   r
   r
   stater
   r   <lambda>V      z8ConditionTests.test_waitfor.<locals>.f.<locals>.<lambda>r   )wait_forrE   rS   r   r   r   r   r
   r   r   T  s
   
"z&ConditionTests.test_waitfor.<locals>.frJ   r   r   )r   r   r#   r   r   r	   r   r%   r   r   rV   r   r
   r   r   test_waitforQ  s   


zConditionTests.test_waitforc              	      s      dg  fdd}t|d}|  tdD ]!}td   d7    W d    n1 s:w   Y  q|  t	d d S )Nr   c                     st    . t  }  jfdddd}t  |  } | | d d  W d    d S 1 s3w   Y  d S )Nc                      r   r   r
   r
   r   r
   r   r   i  r   z@ConditionTests.test_waitfor_timeout.<locals>.f.<locals>.<lambda>g?ra   )r   rd   r   rK   r3   r   )r   rI   r   r   r   successr
   r   r   f  s   
"z.ConditionTests.test_waitfor_timeout.<locals>.frJ   r   r   )
r   r   r#   r   r   r	   r   r%   rS   r!   r   r
   r   r   test_waitfor_timeoutb  s   


z#ConditionTests.test_waitfor_timeoutN)r(   r)   r*   r   r   r   r   r   rk   r   r   r
   r
   r
   r   r     s    Jr   c                   @   s^   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d ZdS )BaseSemaphoreTestsc                 C   s,   | j t| jdd | j t| jtj d d S )N)value)r[   ri   semtypesysmaxsizer"   r
   r
   r   r8     s   z#BaseSemaphoreTests.test_constructorc                 C   sH   |  d}|  |  |  d}|  |  |  |  d S )NrJ   rv   )r   r<   rB   r   semr
   r
   r   r     s   

zBaseSemaphoreTests.test_acquirec                 C   r>   r   )r   r<   r   r
   r
   r   r?     r@   z'BaseSemaphoreTests.test_acquire_destroyc                    s  |  d  d}g g g d  fdd}t|d}|  tt dk r=t  tt dk s0|  dgd  d tdD ]}  qNtt dk rlt  tt dk s_| t	 dgd dgd   d	 tdD ]}  qtt d
k rt  tt d
k s| t	 dgd dgd  d	gd   | 
d   |  | dgd  d S )N   
   r   c                      s4               d S r   rG   r
   r   r   r   r   Zsem_resultsr
   r   r     s   
z4BaseSemaphoreTests.test_acquire_contended.<locals>.f   rJ      rv      FT   )r   r<   r   r#   r!   r   rS   r   rB   sortedrK   r%   )r   rU   r   rV   r   r
   r   r   rW     s@   


$
.z)BaseSemaphoreTests.test_acquire_contendedc                    st  |  d  g g d  fdd}t|d}|  tt dk r8t  tt dk s+|  dgd  d d tt dk rat  tt dk sT| t dgd dgd   d	 d tt d
k rt  tt d
k s| t dgd dgd  d	gd   | 	d   |
  d S )Nr   r   c                      s(             d S r   rs   r
   r   r   r   r   r
   r   r     ru   z/BaseSemaphoreTests.test_multirelease.<locals>.fr   r   rJ   r   rv   r   F)r   r<   r   r#   r!   r   rS   rB   r   rK   r%   rz   r
   r   r   test_multirelease  s6   


$
.z$BaseSemaphoreTests.test_multireleasec                 C   sV   |  d}| |d | |d | |d |  | |d d S )Nrv   F)r   rE   r<   rK   rB   r   r
   r
   r   rF     s   
z#BaseSemaphoreTests.test_try_acquirec                    sV   |  d  g   fdd}t|d  | t dgd dgd   d S )	Nr   c                      s$     d   d d S rD   rG   r
   rh   r   r
   r   r     s   z8BaseSemaphoreTests.test_try_acquire_contended.<locals>.frN   Fr   Tr   )r   r<   r   r%   rS   r   rL   r
   r   r   rM     s   
$z-BaseSemaphoreTests.test_try_acquire_contendedc                 C   s   |  d}| jt|jddd | |jdd | |jdd | |jdd |  | |jdd t }| |jdd t | }| 	|d d S )Nrv   F      ?ra   g{Gzt?rc   )
r   r[   ri   r<   rE   rK   rB   r   rd   r3   )r   r   tr   r
   r
   r   test_acquire_timeout  s   
z'BaseSemaphoreTests.test_acquire_timeoutc                    sT   |        fdd}t|d}|  t  | |j    |  d S )Nc                      rO   r   rP   r
   r   r
   r   r     rR   z0BaseSemaphoreTests.test_default_value.<locals>.frJ   )	r   r<   r   r#   r   rK   r   rB   r%   rz   r
   r   r   test_default_value  s   
z%BaseSemaphoreTests.test_default_valuec                    sb     dd fdd	}|   d    t|t  d   d S )Nrv   c              	      s   ;   d     d | r| W d    n1 s(w   Y  W d    d S W d    d S 1 s@w   Y  d S rD   )rE   r<   rB   rK   rX   r   r
   r   rZ   	  s   "z+BaseSemaphoreTests.test_with.<locals>._withFr   )r   rE   r<   rB   r[   r\   )r   rZ   r
   r   r   r]     s   
zBaseSemaphoreTests.test_withN)r(   r)   r*   r8   r   r?   rW   r   rF   rM   r   r   r]   r
   r
   r
   r   r   z  s    
% r   c                   @      e Zd Z	 dd ZdS )SemaphoreTestsc                 C   s.   |  d}|  |  |  |  d S NrJ   )r   rB   r<   r   r
   r
   r   r     s
   
z&SemaphoreTests.test_release_unacquiredNr(   r)   r*   r   r
   r
   r
   r   r         r   c                   @   r   )BoundedSemaphoreTestsc                 C   s8   |   }| t|j |  |  | t|j d S r   )r   r[   ri   rB   r<   r   r
   r
   r   r   +  s
   z-BoundedSemaphoreTests.test_release_unacquiredNr   r
   r
   r
   r   r   &  r   r   c                   @   s   e Zd Z	 dZdZdd Zdd Zdd Zd	d
 Zd!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d Zd S )"BarrierTestsrN   g       @c                 C   s   | j | j| jd| _d S )Nra   )barriertyperU   defaultTimeoutbarrierr"   r
   r
   r   r-   ;  r   zBarrierTests.setUpc                 C   s   | j   d S r   )r   abortr"   r
   r
   r   r0   =  r.   zBarrierTests.tearDownc                 C   s"   t || jd }|  |  d S r   )r   rU   r%   rz   r
   r
   r   run_threads@  s   zBarrierTests.run_threadsc                 C   s   | j j}| || j t|D ]4}|d d | t|d ||  | j   |d d | t|d |d |  | j   q| | j jd | 	| j j
 d S )Nr   TrJ   )r   partiesrS   rU   r   r   r!   r   	n_waitingrK   broken)r   rh   r   mr   r
   r
   r   	multipassE  s   
zBarrierTests.multipassrJ   c                    s(   	 g g g fdd} | d S )Nc                      s      d S r   )r   r
   passesrh   r   r
   r   r   W  s   z$BarrierTests.test_barrier.<locals>.fr   )r   r   r   r
   r   r   test_barrierR  s   zBarrierTests.test_barrierc                 C   s   	 |  dS )Nr   )r   r"   r
   r
   r   test_barrier_10[  s   
zBarrierTests.test_barrier_10c                    s<   	 g   fdd} | t ttj d S )Nc                     s   j  }  |  d S r   )r   r   r   )r   rh   r   r
   r   r   f  s   
z(BarrierTests.test_wait_return.<locals>.f)r   rS   sumr   rU   rL   r
   r   r   test_wait_returna  s
   
zBarrierTests.test_wait_returnc                    s>   	 g fdd} j|  fdd}| d S )Nc                      s     d d S r&   )r   r
   )rh   r
   r   actionr  r.   z(BarrierTests.test_action.<locals>.actionc                      s       td d S r   )r   rS   r!   r
   r   rh   r   r
   r   r   u  s   z#BarrierTests.test_action.<locals>.fr   rU   r   )r   r   r   r
   r   r   test_actionm  s   zBarrierTests.test_actionc                    s\   	 g  g  fdd} | t d tjd  jj d S )Nc                     st   zj  } | jd krtj    d W d S  tjy+   d Y d S  ty9   j   Y d S w Nrv   T)r   r   rU   r   r   r   BrokenBarrierErrorr   r   r   r   r   r
   r   r     s   


z"BarrierTests.test_abort.<locals>.fr   rJ   )r   rS   r!   rU   rE   r   r   rL   r
   r   r   
test_abort{  s   
zBarrierTests.test_abortc                    sf   	 g  g g  fdd} | t d tjd  tj d S )Nc                     s   j  } | jd kr)j jjd k r#td j jjd k sj   nzj    d W n tj	yD   d Y nw j   d d S )Nrv   rJ   gMbP?T)
r   r   rU   r   r   r	   resetr   r   r   r   r   r   results3r   r
   r   r     s   



z"BarrierTests.test_reset.<locals>.fr   rJ   )r   rS   r!   rU   rL   r
   r   r   
test_reset  s   
zBarrierTests.test_resetc                    st   	 g g g  j  fdd}| td tjd  tj d S )Nc                     s   zj  } | jd krtj   d W n tjy)   d Y n ty6   j   Y nw   jd krEj      j   d d S r   )	r   r   rU   r   r   r   r   r   r   r   Zbarrier2r   r   r   r   r
   r   r     s"   




z,BarrierTests.test_abort_and_reset.<locals>.fr   rJ   )r   rU   r   rS   r!   rL   r
   r   r   test_abort_and_reset  s   
z!BarrierTests.test_abort_and_resetc                    s   	  fdd}  | d S )Nc                     s:    j  } |  jd krtd  tj j jd d S )Nrv   r   rc   )r   r   rU   r   r	   r[   r   r   r   r"   r
   r   r     s   

z$BarrierTests.test_timeout.<locals>.fr   rL   r
   r"   r   rk     s   zBarrierTests.test_timeoutc                    s.   	 j jdd  fdd}| d S )Ng333333?ra   c                     s4      } | jd krtd tj j  d S )Nrv   r   )r   rU   r   r	   r[   r   r   r   r   r   r
   r   r     s   
z,BarrierTests.test_default_timeout.<locals>.fr   rL   r
   r  r   test_default_timeout  s   z!BarrierTests.test_default_timeoutc                 C   s   |  d}|  |  d S r   )r   r   )r   rV   r
   r
   r   test_single_thread  s   
zBarrierTests.test_single_threadN)rJ   )r(   r)   r*   rU   r   r-   r0   r   r   r   r   r   r   r   r   r   rk   r  r  r
   r
   r
   r   r   4  s$    
	"r   )osrp   r   r   _threadr   r   r   Zunittestrl   testr   Ztest.supportr   Z
skipUnlesshasattrr   r   objectr   ZTestCaser+   r4   rr   r   r   r   r   r   r   r   r
   r
   r
   r   <module>   s:    1 	DC_ 0 