a
    zeNx                     @   s$  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 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forkz9platform doesn't support fork (no _at_fork_reinit method)c                   C   s   t d d S )N{Gz?)timesleep r	   r	   %/usr/lib/python3.9/test/lock_tests.py_wait   s    r   c                   @   s.   e Zd ZdddZdd Zdd Zdd	 Zd
S )BunchFc                    sx    _ |_g _g _| _t _j   fdd}zt	|D ]}t
|d qLW n   d_ Y n0 d S )Nc               	      sZ   t  } j|  z$   W j|  jsVt  q*nj|  jsTt  qF0 d S 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  q 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  q | jd d d  d S r   )r    r   r   r   r   __exit__r!   r	   r	   r
   wait_for_finishedA   s    zBunch.wait_for_finishedc                 C   s
   d| _ d S NT)r   r!   r	   r	   r
   	do_finishG   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
   setUpL   s    zBaseTestCase.setUpc                 C   s   t j| j  t   d S r   )r   Zthreading_cleanupr+   reap_childrenr!   r	   r	   r
   tearDownO   s    zBaseTestCase.tearDownc                 C   s$   |  ||d  | ||d  d S )Ng333333?g      $@)ZassertGreaterEqual
assertLess)r   actualZexpectedr	   r	   r
   assertTimeoutS   s    zBaseTestCase.assertTimeoutN)r'   r(   r)   r,   r.   r1   r	   r	   r	   r
   r*   K   s   r*   c                   @   st   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_constructora   s    zBaseLockTests.test_constructorc                 C   s   |   }| t|d ~d S )Nz<unlocked .* object (.*)?at .*>)r3   assertRegexreprr4   r	   r	   r
   	test_repre   s    zBaseLockTests.test_reprc                 C   s&   |   }|  | t|d ~d S )Nz<locked .* object (.*)?at .*>)r3   acquirer7   r8   r4   r	   r	   r
   test_locked_reprj   s    zBaseLockTests.test_locked_reprc                 C   s   |   }|  ~d S r   )r3   r:   r4   r	   r	   r
   test_acquire_destroyp   s    z"BaseLockTests.test_acquire_destroyc                 C   s   |   }|  |  ~d S r   r3   r:   releaser4   r	   r	   r
   test_acquire_releaseu   s    z"BaseLockTests.test_acquire_releasec                 C   s$   |   }| |d |  d S NF)r3   
assertTruer:   r>   r4   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 r@   r   r:   r	   r5   resultr	   r
   r      s    z3BaseLockTests.test_try_acquire_contended.<locals>.f   r   )r3   r:   r   r$   assertFalser>   r   r   r	   rD   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                      s          d S r   r:   r>   r	   r5   r	   r
   r      s    z/BaseLockTests.test_acquire_contended.<locals>.fr   )
r3   r:   r   r"   r   assertEqualr    r   r>   r$   r   Nr   br	   rL   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                      s          d S r   rK   r	   rL   r	   r
   r      s    z"BaseLockTests.test_with.<locals>.fc                    s4     | d ur| W d    n1 s&0    Y  d S r   r	   errrL   r	   r
   _with   s    z&BaseLockTests.test_with.<locals>._withrF   )N)r3   r   r$   assertRaises	TypeError)r   r   rT   r	   rL   r
   	test_with   s    zBaseLockTests.test_withc                    s`   |     fdd}tt }t|d  tt |kr\td | |tt  d S )Nc                      s          d S r   rK   r	   rL   r	   r
   r      s    z)BaseLockTests.test_thread_leak.<locals>.f   g?)	r3   r    r   	enumerater   r$   r   r   rM   )r   r   r   r	   rL   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 )NFrF   itimeoutg}Ô%ITrJ   c                     s4   t  }  jdd t  }||   d S )N      ?r[   )r   	monotonicr   r:   )t1t2r5   resultsr	   r
   r      s    z%BaseLockTests.test_timeout.<locals>.fr   r]   )r3   rU   
ValueErrorr:   OverflowErrorr   r>   r   r^   rA   r/   r   r$   rG   r1   )r   r_   r`   r   r	   ra   r
   test_timeout   s     zBaseLockTests.test_timeoutc                 C   s"   |   }t|}| |  d S r   )r3   weakrefrefZassertIsNotNoner   r5   rg   r	   r	   r
   test_weakref_exists   s    
z!BaseLockTests.test_weakref_existsc                 C   s,   |   }t|}~t  | |  d S r   )r3   rf   rg   gcZcollectZassertIsNonerh   r	   r	   r
   test_weakref_deleted   s
    
z"BaseLockTests.test_weakref_deletedN)r'   r(   r)   r6   r9   r;   r<   r?   rB   rI   rQ   rW   rZ   re   ri   rk   r	   r	   r	   r
   r2   \   s   
r2   c                   @   s0   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 p t|d tdkrBt  q.t  | td    tdkrtt  q`| td W d    n1 s0    Y  d S )Nc                      s(       d      d  d S r   r:   r   r	   r5   Zphaser	   r
   r      s    
z#LockTests.test_reacquire.<locals>.fr	   r   rF      )r3   r   r   r   r    r   rM   r>   rH   r	   rn   r
   test_reacquire   s    

zLockTests.test_reacquirec                    sB   |        fdd}t|d}|        d S )Nc                      s       d S r   )r>   r	   rL   r	   r
   r     s    z*LockTests.test_different_thread.<locals>.frF   )r3   r:   r   r$   r>   r   r   rP   r	   rL   r
   test_different_thread   s    
zLockTests.test_different_threadc                 C   sN   |   }|  | |jdd |  | |  | |jdd d S )Nr   r[   F)blocking)r3   r:   rG   r>   lockedrA   r4   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   rK   rL   r	   r	   r
   use_lock  s    z/LockTests.test_at_fork_reinit.<locals>.use_lock)r3   _at_fork_reinitr:   )r   rv   r5   Zlock2r	   r	   r
   test_at_fork_reinit  s    zLockTests.test_at_fork_reinitN)r'   r(   r)   rp   rr   ru   requires_forkrx   r	   r	   r	   r
   rl      s
   
rl   c                   @   s4   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   r=   r4   r	   r	   r
   rp   ,  s    zRLockTests.test_reacquirec                 C   sX   |   }| t|j |  |  |  |  |  |  | t|j d S r   )r3   rU   RuntimeErrorr>   r:   r4   r	   r	   r
   test_release_unacquired5  s    z"RLockTests.test_release_unacquiredc                 C   sX   |   }| t|j |  |  |  |  |  |  | t|j d S r   )r3   rU   r{   _release_saver:   r>   r4   r	   r	   r
   test_release_save_unacquiredA  s    z'RLockTests.test_release_save_unacquiredc                    sR   |     fdd}t|dd}z| t j W |  n
|  0 |  d S )Nc                      s       d S r   )r:   r	   rL   r	   r
   r   P  s    z+RLockTests.test_different_thread.<locals>.frF   T)r3   r   rU   r{   r>   r&   r$   rq   r	   rL   r
   rr   M  s    z RLockTests.test_different_threadc                    s   |    |       |       |    g  fdd}t|d  | d     |       |    d S )Nc                      s       d S r   )r   	_is_ownedr	   rD   r	   r
   r   a  s    z$RLockTests.test__is_owned.<locals>.frF   r   )r3   rG   r   r:   rA   r   r$   r>   rH   r	   rD   r
   test__is_ownedY  s    zRLockTests.test__is_ownedN)r'   r(   r)   rp   r|   r~   rr   r   r	   r	   r	   r
   rz   (  s
   	rz   c                   @   s@   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   )	eventtyperG   is_setsetrA   clearr   evtr	   r	   r
   test_is_setp  s    zEventTests.test_is_setc                    s|   d}g g  fdd}t ||}|  t  | td    |  | dg|  | dg|  d S )NrJ   c                      s            d S r   r   waitr	   r   results1results2r	   r
   r     s    z#EventTests._check_notify.<locals>.fr   T)r   r"   r   rM   r    r   r$   )r   r   rO   r   rP   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 qHg g    t||  | dg|  D ]\}}| | qd S )NrJ   c                     s@     d t }  d}t } |||  f d S )Ng        r]   )r   r   r   r^   )r_   rr`   r   r	   r
   r     s
    
z"EventTests.test_timeout.<locals>.fFr]   T)r   r   r$   rM   rG   r1   r   rA   )r   rO   r   r   dtr	   r   r
   re     s"    
zEventTests.test_timeoutc                    sn   |    g dd} fdd}t||}|  t       |  | dg|  d S )Ng      ?rJ   c                      s     d  d S N   r   r	   r   rb   r\   r	   r
   r     s    z(EventTests.test_set_and_clear.<locals>.fT)	r   r   r"   r   r   r   r   r$   rM   rN   r	   r   r
   test_set_and_clear  s    

zEventTests.test_set_and_clearc                 C   s   |   }|j" | |jd W d    n1 s60    Y  |  |j" | |jd W d    n1 sv0    Y  d S r@   )r   _condrG   r:   rw   r   r	   r	   r
   rx     s    0zEventTests.test_at_fork_reinitN)
r'   r(   r)   r   r   r   re   r   ry   rx   r	   r	   r	   r
   r   k  s   r   c                   @   sL   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    n1 s0    Y  d S r@   )condtyper:   r>   r   LockrG   rA   )r   condr5   r	   r	   r
   test_acquire  s    
zConditionTests.test_acquirec                 C   s   |   }| t|j d S r   )r   rU   r{   r   r   r   r	   r	   r
   test_unacquired_wait  s    z#ConditionTests.test_unacquired_waitc                 C   s   |   }| t|j d S r   )r   rU   r{   notifyr   r	   r	   r
   test_unacquired_notify  s    z%ConditionTests.test_unacquired_notifyc                    s  d}g g g d fdd}t ||}|  tdk rNt  q:  | g      d t  d   tdk rt  q| dgd  | g  tdk rt  q    d t  d   tt d	k rt  q| dgd d
gd   | d
gd  tdk rTt  q<    	  t  d   tdk rt  qv| dgd d
gd   | d
gd dgd   |
  d S )NrJ   r   c                     sd          }    | f        }    | f d S r   )r:   r   r   r>   rE   r   	phase_numreadyr   r   r	   r
   r     s    

z'ConditionTests._check_notify.<locals>.f   rF   )TrF   ro      )Tro   )Tr   )r   r"   r    r   r   rM   r:   r   r>   
notify_allr$   )r   r   rO   r   rP   r	   r   r
   r     sX    




zConditionTests._check_notifyc                 C   s    |   }| | | | d S r   )r   r   r   r	   r	   r
   r   4  s    
zConditionTests.test_notifyc                    sd   |    g d} fdd}t||  | t| D ]\}}| |d | | q@d S )NrJ   c                     s@       t }  d}t }   ||  |f d S )Nr]   )r:   r   r^   r   r>   r   )r_   rE   r`   r   rb   r	   r
   r   >  s    
z&ConditionTests.test_timeout.<locals>.fr]   )r   r   r$   rM   r    r1   rG   )r   rO   r   r   rE   r	   r   r
   re   :  s    zConditionTests.test_timeoutc              	      s      d fdd}t|d}|  tdD ]B}td    d7    W d    q61 sn0    Y  q6|  d S )Nr   c                     sP    8   fdd} |  d W d    n1 sB0    Y  d S )Nc                      s    dkS r   r	   r	   stater	   r
   <lambda>U      z8ConditionTests.test_waitfor.<locals>.f.<locals>.<lambda>r   )wait_forrA   rM   r   r   r   r   r	   r
   r   S  s    
z&ConditionTests.test_waitfor.<locals>.frF   r   r   )r   r   r"   r   r   r   r   r$   r   r   rP   r   r	   r   r
   test_waitforP  s    

(zConditionTests.test_waitforc              	      s      dg  fdd}t|d}|  tdD ]B}td    d7    W d    q<1 st0    Y  q<|  t	d d S )Nr   c                     sr    Z t  }  jfdddd}t  |  } | | d d  W d    n1 sd0    Y  d S )Nc                      s    dkS r   r	   r	   r   r	   r
   r   h  r   z@ConditionTests.test_waitfor_timeout.<locals>.f.<locals>.<lambda>g?r[   )r   r^   r   rG   r1   r   )r   rE   r   r   r   successr	   r
   r   e  s    
z.ConditionTests.test_waitfor_timeout.<locals>.frF   r   r   )
r   r   r"   r   r   r   r   r$   rM   r    r   r	   r   r
   test_waitfor_timeouta  s    

(z#ConditionTests.test_waitfor_timeoutN)r'   r(   r)   r   r   r   r   r   re   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)rU   rc   semtypesysmaxsizer!   r	   r	   r
   r6   ~  s    z#BaseSemaphoreTests.test_constructorc                 C   sH   |  d}|  |  |  d}|  |  |  |  d S )NrF   ro   )r   r:   r>   r   semr	   r	   r
   r     s    

zBaseSemaphoreTests.test_acquirec                 C   s   |   }|  ~d S r   )r   r:   r   r	   r	   r
   r<     s    z'BaseSemaphoreTests.test_acquire_destroyc                    st  |  d  d}g g g d  fdd}t|d}|  tt dk rht  qL|  dgd  d tdD ]}  qtt dk rt  q| t	 dgd dgd   d	 tdD ]}  qtt d
k rt  q| t	 dgd dgd  d	gd   | 
d   |  | dgd  d S )N   
   r   c                      s4               d S r   rC   r	   r   r   r   r   Zsem_resultsr	   r
   r     s    
z4BaseSemaphoreTests.test_acquire_contended.<locals>.f   rF      ro      FT   )r   r:   r   r"   r    r   rM   r   r>   sortedrG   r$   )r   rO   r   rP   r   r	   r   r
   rQ     s:    


$
.z)BaseSemaphoreTests.test_acquire_contendedc                    s>  |  d  g g d  fdd}t|d}|  tt dk r^t  qB|  dgd  d d tt dk rt  q| t dgd dgd   d	 d tt d
k rt  q| t dgd dgd  d	gd   | 	d   |
  d S )Nr   r   c                      s(             d S r   rm   r	   r   r   r   r   r	   r
   r     s    
z/BaseSemaphoreTests.test_multirelease.<locals>.fr   r   rF   r   ro   r   F)r   r:   r   r"   r    r   rM   r>   r   rG   r$   rq   r	   r   r
   test_multirelease  s0    


$
.z$BaseSemaphoreTests.test_multireleasec                 C   sV   |  d}| |d | |d | |d |  | |d d S )Nro   F)r   rA   r:   rG   r>   r   r	   r	   r
   rB     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 r@   rC   r	   rb   r   r	   r
   r     s    z8BaseSemaphoreTests.test_try_acquire_contended.<locals>.frJ   Fr   Tr   )r   r:   r   r$   rM   r   rH   r	   r   r
   rI     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 )Nro   F      ?r[   g{Gzt?r]   )
r   rU   rc   r:   rA   rG   r>   r   r^   r1   )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                      s          d S r   rK   r	   r   r	   r
   r     s    z0BaseSemaphoreTests.test_default_value.<locals>.frF   )	r   r:   r   r"   r   rG   r   r>   r$   rq   r	   r   r
   test_default_value  s    
z%BaseSemaphoreTests.test_default_valuec                    sb     dd fdd	}|   d    t|t  d   d S )Nro   c              	      s|   d   d   (  d | r<| W d    n1 sP0    Y  W d    n1 sn0    Y  d S r@   )rA   r:   r>   rG   rR   r   r	   r
   rT     s    z+BaseSemaphoreTests.test_with.<locals>._withF)N)r   rA   r:   r>   rU   rV   )r   rT   r	   r   r
   rW     s    
zBaseSemaphoreTests.test_withN)r'   r(   r)   r6   r   r<   rQ   r   rB   rI   r   r   rW   r	   r	   r	   r
   r   y  s   
% r   c                   @   s   e Zd Zdd ZdS )SemaphoreTestsc                 C   s.   |  d}|  |  |  |  d S NrF   )r   r>   r:   r   r	   r	   r
   r|     s
    
z&SemaphoreTests.test_release_unacquiredNr'   r(   r)   r|   r	   r	   r	   r
   r     s   r   c                   @   s   e Zd Zdd ZdS )BoundedSemaphoreTestsc                 C   s8   |   }| t|j |  |  | t|j d S r   )r   rU   rc   r>   r:   r   r	   r	   r
   r|   *  s
    z-BoundedSemaphoreTests.test_release_unacquiredNr   r	   r	   r	   r
   r   %  s   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 )"BarrierTestsrJ   g       @c                 C   s   | j | j| jd| _d S )Nr[   )barriertyperO   defaultTimeoutbarrierr!   r	   r	   r
   r,   :  s    zBarrierTests.setUpc                 C   s   | j   d S r   )r   abortr!   r	   r	   r
   r.   <  s    zBarrierTests.tearDownc                 C   s"   t || jd }|  |  d S r   )r   rO   r$   rq   r	   r	   r
   run_threads?  s    zBarrierTests.run_threadsc                 C   s   | j j}| || j t|D ]h}|d d | t|d ||  | j   |d d | t|d |d |  | j   q| | j jd | 	| j j
 d S )Nr   TrF   )r   partiesrM   rO   r   r   r    r   	n_waitingrG   broken)r   rb   r   mr   r	   r	   r
   	multipassD  s    
zBarrierTests.multipassrF   c                    s&   g g g fdd} | d S )Nc                      s      d S r   )r   r	   passesrb   r   r	   r
   r   V  s    z$BarrierTests.test_barrier.<locals>.fr   )r   r   r   r	   r   r
   test_barrierQ  s    zBarrierTests.test_barrierc                 C   s
   |  dS )Nr   )r   r!   r	   r	   r
   test_barrier_10Z  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   rb   r   r	   r
   r   e  s    
z(BarrierTests.test_wait_return.<locals>.f)r   rM   sumr   rO   rH   r	   r   r
   test_wait_return`  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	   )rb   r	   r
   actionq  s    z(BarrierTests.test_action.<locals>.actionc                      s       td d S r   )r   rM   r    r	   r   rb   r   r	   r
   r   t  s    z#BarrierTests.test_action.<locals>.fr   rO   r   )r   r   r   r	   r   r
   test_actionl  s
    zBarrierTests.test_actionc                    sZ   g  g  fdd} | t d tjd  jj d S )Nc                     sr   z4j  } | jd krtj    d W n8 tjyR   d Y n tyl   j   Y n0 d S Nro   T)r   r   rO   r{   r   r   BrokenBarrierErrorr   r   r   r   r   r	   r
   r     s    


z"BarrierTests.test_abort.<locals>.fr   rF   )r   rM   r    rO   rA   r   r   rH   r	   r   r
   
test_abortz  s    
zBarrierTests.test_abortc                    sd   g  g g  fdd} | t d tjd  tj d S )Nc                     s   j  } | jd krBj jjd k r6td qj   n8zj    d W n tj	yx   d Y n0 j   d d S )Nro   rF   gMbP?T)
r   r   rO   r   r   r   resetr   r   r   r   r   r   results3r   r	   r
   r     s    


z"BarrierTests.test_reset.<locals>.fr   rF   )r   rM   r    rO   rH   r	   r   r
   
test_reset  s    
zBarrierTests.test_resetc                    sr   g g g  j  fdd}| td tjd  tj d S )Nc                     s   z4j  } | jd krtj   d W n8 tjyR   d Y n tyl   j   Y n0   jd krj      j   d d S r   )	r   r   rO   r{   r   r   r   r   r   r   Zbarrier2r   r   r   r   r	   r
   r     s     




z,BarrierTests.test_abort_and_reset.<locals>.fr   rF   )r   rO   r   rM   r    rH   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 )Nro   r   r]   )r   r   rO   r   r   rU   r   r   r   r!   r	   r
   r     s    

z$BarrierTests.test_timeout.<locals>.fr   rH   r	   r!   r
   re     s    zBarrierTests.test_timeoutc                    s,   j jdd  fdd}| d S )Ng333333?r[   c                     s4      } | jd kr td tj j  d S )Nro   r   )r   rO   r   r   rU   r   r   r   r   r   r	   r
   r     s    
z,BarrierTests.test_default_timeout.<locals>.fr   rH   r	   r   r
   test_default_timeout  s    z!BarrierTests.test_default_timeoutc                 C   s   |  d}|  |  d S r   )r   r   )r   rP   r	   r	   r
   test_single_thread  s    
zBarrierTests.test_single_threadN)rF   )r'   r(   r)   rO   r   r,   r.   r   r   r   r   r   r   r   r   r   re   r   r   r	   r	   r	   r
   r   3  s    
	"r   )osrj   r   r   _threadr   r   r   Zunittestrf   testr   Z
skipUnlesshasattrry   r   objectr   ZTestCaser*   r2   rl   rz   r   r   r   r   r   r   r	   r	   r	   r
   <module>   s4   1 	DC_ 0 