
    ibU                        d Z ddlZddlZ	 ddlmZmZ n# e$ r ddlmZmZ Y nw xY wddlZddl	Z	ddl
mZ ddlmZ d Z G d de          Z G d	 d
ee	j                  Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Zedk    r ed           dS dS )z/
Various tests for synchronization primitives.
    N)start_new_thread	get_ident)support)TimeAssertMixinc                  .    t          j        d           d S )Ng{Gz?)timesleep     B/usr/local/lib/python3.11/dist-packages/gevent/tests/lock_tests.py_waitr      s    Jtr   c                   ,    e Zd ZdZddZd Zd Zd ZdS )	Bunchz
    A bunch of threads.
    Fc                       _         | _        g  _        g  _        |  _         fd}t          |          D ]}t          |d           dS )z
        Construct a bunch of `n` threads running the same function `f`.
        If `wait_before_exit` is True, the threads won't terminate until
        do_finish() is called.
        c                  T   t                      } j                            |            	               j                            |            j        st                       j        d S d S # j                            |            j        st                       j        w xY wN)r   startedappendfinished	_can_exitr   )tidfselfs    r   taskzBunch.__init__.<locals>.task$   s    ++CL$$$$$S))). GGG .      $$S))). GGG .     s   
A/ /8B'r
   N)r   nr   r   r   ranger   )r   r   r   wait_before_exitr   _s   ``    r   __init__zBunch.__init__   s~     --	 	 	 	 	 	 q 	' 	'AT2&&&&	' 	'r   c                     t          | j                  | j        k     r-t                       t          | j                  | j        k     +d S d S r   )lenr   r   r   r   s    r   wait_for_startedzBunch.wait_for_started0   sG    $,$&((GGG $,$&((((((r   c                     t          | j                  | j        k     r-t                       t          | j                  | j        k     +d S d S r   )r!   r   r   r   r"   s    r   wait_for_finishedzBunch.wait_for_finished4   sG    $-  46))GGG $-  46))))))r   c                     d| _         d S NT)r   r"   s    r   	do_finishzBunch.do_finish8   s    r   N)F)__name__
__module____qualname____doc__r   r#   r%   r(   r
   r   r   r   r      s_         ' ' ' '.        r   r   c                       e Zd Zd Zd ZdS )BaseTestCasec                 6    t          j                    | _        d S r   )r   threading_setup_threadsr"   s    r   setUpzBaseTestCase.setUp=   s    /11r   c                 R    t          j        | j          t          j                     d S r   )r   threading_cleanupr1   reap_childrenr"   s    r   tearDownzBaseTestCase.tearDown@   s'    !4=11r   N)r)   r*   r+   r2   r6   r
   r   r   r.   r.   <   s2        2 2 2         r   r.   c                   H    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )BaseLockTestsz;
    Tests for both recursive and non-recursive locks.
    c                     t                      r   NotImplementedErrorr"   s    r   locktypezBaseLockTests.locktypeJ       !###r   c                 0    |                                  }~d S r   )r<   r   locks     r   test_constructorzBaseLockTests.test_constructorM   s    }}DDr   c                 X    |                                  }|                                 ~d S r   )r<   acquirer?   s     r   test_acquire_destroyz"BaseLockTests.test_acquire_destroyQ   s#    }}DDr   c                     |                                  }|                                 |                                 ~d S r   r<   rC   releaser?   s     r   test_acquire_releasez"BaseLockTests.test_acquire_releaseV   s0    }}DDr   c                     |                                  }|                     |                    d                     |                                 d S NF)r<   
assertTruerC   rG   r?   s     r   test_try_acquirezBaseLockTests.test_try_acquire\   s>    }}U++,,,r   c                    |                                                                   g fd}t          |d                                           |                     d                                                     d S )Nc                  X                                              d                     d S rJ   r   rC   r@   results   r   r   z3BaseLockTests.test_try_acquire_contended.<locals>.fe   s'    MM$,,u--.....r      r   )r<   rC   r   r%   assertFalserG   r   r   r@   rQ   s     @@r   test_try_acquire_contendedz(BaseLockTests.test_try_acquire_contendeda   s    }}	/ 	/ 	/ 	/ 	/ 	/a%%'''###r   c                    |                                                                   d}fd}t          ||          }|                                 t	                       |                     t          |j                  d                                            |	                                 |                     t          |j                  |           d S )N   c                  X                                                                         d S r   rC   rG   r@   s   r   r   z/BaseLockTests.test_acquire_contended.<locals>.fo   !    LLNNNLLNNNNNr   r   )
r<   rC   r   r#   r   assertEqualr!   r   rG   r%   )r   Nr   br@   s       @r   test_acquire_contendedz$BaseLockTests.test_acquire_contendedk   s    }}	 	 	 	 	 !QKK	QZ!,,,	QZ!,,,,,r   c                 $   |                                  fd}dfd	} |             t          |d                                           |                     t          |t                     t          |d                                           d S )Nc                  X                                                                         d S r   rY   rZ   s   r   r   z"BaseLockTests.test_with.<locals>.f}   r[   r   c                 H    5  | | 	 d d d            d S # 1 swxY w Y   d S r   r
   )errr@   s    r   _withz&BaseLockTests.test_with.<locals>._with   s|      ?I #                 s   rR   r   )r<   r   r%   assertRaises	TypeError)r   r   rd   r@   s      @r   	test_withzBaseLockTests.test_with{   s    }}	 	 	 	 		 	 	 	 	 	 	a%%''')UI666a%%'''''r   c                 &   |                                  fd}t          t          j                              }t	          |d                                           |                     |t          t          j                                         d S )Nc                  X                                                                         d S r   rY   rZ   s   r   r   z)BaseLockTests.test_thread_leak.<locals>.f   r[   r      )r<   r!   	threading	enumerater   r%   r\   )r   r   r   r@   s      @r   test_thread_leakzBaseLockTests.test_thread_leak   s     }}	 	 	 	 	 	#%%&& 	a&&(((C	 3 5 56677777r   N)r)   r*   r+   r,   r<   rA   rD   rH   rL   rU   r_   rg   rm   r
   r   r   r8   r8   E   s         $ $ $    
    
  - - - ( ( ( 8 8 8 8 8r   r8   c                       e Zd ZdZd Zd ZdS )	LockTestszn
    Tests for non-recursive, weak locks
    (which can be acquired and released from different threads).
    c                    |                                  g fd}t          |d           st                       t                       |                     t	                    d                                            t	                    dk    r!t                       t	                    dk    !|                     t	                    d           d S )Nc                                                                             d                                                                   d            d S r   rC   r   )r@   phases   r   r   z#LockTests.test_reacquire.<locals>.f   sG    LLNNNLLLLNNNLLr   r
   rR      )r<   r   r   r\   r!   rG   )r   r   r@   rs   s     @@r   test_reacquirezLockTests.test_reacquire   s    }}	 	 	 	 	 	
 	B 	GGG  	UQ'''%jjAooGGG %jjAooUQ'''''r   c                     |                                                                   fd}t          |d          }|                                                                                                   d S )Nc                  0                                       d S r   )rG   rZ   s   r   r   z*LockTests.test_different_thread.<locals>.f       LLNNNNNr   rR   )r<   rC   r   r%   rG   r   r   r^   r@   s      @r   test_different_threadzLockTests.test_different_thread   ss    }}	 	 	 	 	!QKK	r   N)r)   r*   r+   r,   ru   rz   r
   r   r   ro   ro      s<         ( ( (&	 	 	 	 	r   ro   c                   *    e Zd ZdZd Zd Zd Zd ZdS )
RLockTestsz$
    Tests for recursive locks.
    c                    |                                  }|                                 |                                 |                                 |                                 |                                 |                                 d S r   rF   r?   s     r   ru   zRLockTests.test_reacquire   sa    }}r   c                    |                                  }|                     t          |j                   |                                 |                                 |                                 |                                 |                                 |                                 |                     t          |j                   d S r   )r<   re   RuntimeErrorrG   rC   r?   s     r   test_release_unacquiredz"RLockTests.test_release_unacquired   s    }},555,55555r   c                     |                                  fd}t          |dd          }	 |                     t          j                   |                                 d S # |                                 w xY w)Nc                  0                                       d S r   )rC   rZ   s   r   r   z+RLockTests.test_different_thread.<locals>.f   rx   r   rR   T)r<   r   re   r   rG   r(   ry   s      @r   rz   z RLockTests.test_different_thread   sz    }}	 	 	 	 	!Q	lDL999KKMMMMMAKKMMMMs    A# #A9c                    |                                  |                                                                                                 |                                                                                                 |                                                                g fd}t          |d                                           |                     d                                                     |                                                                                                 |                                                                d S )Nc                  V                                                                     d S r   )r   	_is_ownedrP   s   r   r   z$RLockTests.test__is_owned.<locals>.f   s%    MM$..**+++++r   rR   r   )r<   rS   r   rC   rK   r   r%   rG   rT   s     @@r   test__is_ownedzRLockTests.test__is_owned   s0   }}))***(()))(()))	, 	, 	, 	, 	, 	,a%%'''###(()))))*****r   N)r)   r*   r+   r,   ru   r   rz   r   r
   r   r   r|   r|      sZ           
6 
6 
6	 	 	+ + + + +r   r|   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )
EventTestsz"
    Tests for Event objects.
    c                     t                      r   r:   r"   s    r   	eventtypezEventTests.eventtype   r=   r   c                 T   |                                  }|                     |                                           |                                 |                     |                                           |                                 |                     |                                           |                                 |                     |                                           |                                 |                     |                                           d S r   )r   rS   is_setsetrK   clearr   evts     r   test_is_setzEventTests.test_is_set   s    nn&&&			

%%%			

%%%		&&&		&&&&&r   c                    d}g g fd}t          ||          }|                                 t                       |                     t	                    d                                            |                                 |                     dg|z             |                     dg|z             d S )NrW   c                                                                                                                                                                                                                            d S r   )waitr   r   )r   results1results2s   r   r   z#EventTests._check_notify.<locals>.f  sW    HHJJJOOCJJLL)))HHJJJOOCJJLL)))))r   r   T)r   r#   r   r\   r!   r   r%   )r   r   r]   r   r^   r   r   s    `   @@r   _check_notifyzEventTests._check_notify  s    	* 	* 	* 	* 	* 	* 	*
 !QKK	X***				D6A:...D6A:.....r   c                     |                                  }|                     |           |                                 |                                 |                     |           d S r   )r   r   r   r   r   s     r   test_notifyzEventTests.test_notify  sY    nn3					3r   c                    |                                  g g d}fd}t          ||                                           |                     dg|z             D ]1\  }}|                     |           |                     |dd           2g g                                  t          ||                                           |                     dg|z             D ]\  }}|                     |           d S )NrW   c                  R                        d                                                                          t          j                    }                      d                                           }t          j                    }                    ||| z
  f           d S )Ng        皙?)r   r   r   r   )t1rt2r   r   r   s      r   r   z"EventTests.test_timeout.<locals>.f'  s~    HHSMMMOOCJJLL)))BHHSMMM

ABOOQRL)))))r   Fg
ףp=
?
   T)r   r   r%   r\   rS   assertTimeWithinRanger   rK   )r   r]   r   r   dtr   r   r   s        @@@r   test_timeoutzEventTests.test_timeout"  s?   nn	* 	* 	* 	* 	* 	* 	* 	a%%'''E7Q;/// 	5 	5EArQ&&r44444			a%%'''D6A:... 	 	EArOOA	 	r   N)	r)   r*   r+   r,   r   r   r   r   r   r
   r   r   r   r      si         $ $ $
' 
' 
'/ / /&         r   r   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
ConditionTestsz(
    Tests for condition variables.
    c                     t                      r   r:   r   argss     r   condtypezConditionTests.condtypeC  r=   r   c                    |                                  }|                                 |                                 |                                 |                                 t          j                    }|                      |          }|                                 |                     |                    d                     |                                 |                     |                    d                     |                     |                    d                     |                                 |5  |                     |                    d                     d d d            d S # 1 swxY w Y   d S rJ   )r   rC   rG   rk   LockrS   rK   )r   condr@   s      r   test_acquirezConditionTests.test_acquireF  sr   }} 	~}}T""e,,---U++,,,e,,--- 	2 	2T\\%00111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   )E99E= E=c                 n    |                                  }|                     t          |j                   d S r   )r   re   r   r   r   r   s     r   test_unacquired_waitz#ConditionTests.test_unacquired_waitZ  s-    }},	22222r   c                 n    |                                  }|                     t          |j                   d S r   )r   re   r   notifyr   s     r   test_unacquired_notifyz%ConditionTests.test_unacquired_notify^  s-    }},44444r   c                    d}g g dfd}t          ||          }|                                 t                       |                     g                                                                 d           t                       d                                 t                    dk     r!t                       t                    dk     !|                     dgdz             |                     g                                                                 d           t                       d                                 t                    t                    z   dk     r1t                       t                    t                    z   dk     1|                     dgdz  dgdz  z              |                     dgdz                                                                               t                       d                                 t                    dk     r!t                       t                    dk     !|                     dgdz  dgdz  z              |                     dgdz  dgdz  z              |	                                 d S )NrW   r   c                  L                                                                                                                                                                                                                                                                               d S r   )rC   r   rG   r   )r   	phase_numr   r   s   r   r   z'ConditionTests._check_notify.<locals>.fg  s{    LLNNNIIKKKLLNNNOOI&&&LLNNNIIKKKLLNNNOOI&&&&&r      rR   rt      )
r   r#   r   r\   rC   r   rG   r!   
notify_allr%   )r   r   r]   r   r^   r   r   r   s    `   @@@r   r   zConditionTests._check_notifyb  s   		' 	' 	' 	' 	' 	' 	' 	' !QKK	2&&&A	(mmaGGG (mmaA37+++2&&&A	(mmc(mm+a//GGG (mmc(mm+a//A37aS1W#4555A37+++	(mmaGGG (mmaA37aS1W#4555A37aS1W#4555	r   c                     |                                  }|                     |           |                     |           d S r   )r   r   r   s     r   r   zConditionTests.test_notify  s=    }}4   4     r   c                    |                                  g d}fd}t          ||                                           |                     t	                    d           D ]}|                     |dd           d S )NrW   c                                                        t          j                    }                     d           t          j                    }                                                     || z
             d S )Nr   )rC   r   r   rG   r   )r   r   r   resultss     r   r   z&ConditionTests.test_timeout.<locals>.f  s^    LLNNNBIIcNNNBLLNNNNN27#####r   gRQ?       @)r   r   r%   r\   r!   r   )r   r]   r   r   r   r   s       @@r   r   zConditionTests.test_timeout  s    }}	$ 	$ 	$ 	$ 	$ 	$ 	a%%'''Wq))) 	6 	6B&&r45555	6 	6r   N)r)   r*   r+   r,   r   r   r   r   r   r   r   r
   r   r   r   r   >  s         $ $ $2 2 2(3 3 35 5 50 0 0d! ! !6 6 6 6 6r   r   c                   H    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )BaseSemaphoreTestszB
    Common tests for {bounded, unbounded} semaphore objects.
    c                     t                      r   r:   r   s     r   semtypezBaseSemaphoreTests.semtype  r=   r   c                     |                      t          | j        d           |                      t          t          f| j        t	          t
          dt	          t
          dd                                 d S )N)valuemaxintmaxsize)re   
ValueErrorr   OverflowErrorgetattrsysr"   s    r   rA   z#BaseSemaphoreTests.test_constructor  su    *dl"===:}5t|!(hYPT8U8U!V!V V 	 	X 	X 	X 	X 	Xr   c                 J   |                      d          }|                                 |                                 |                      d          }|                                 |                                 |                                 |                                 d S )NrR   rt   )r   rC   rG   r   sems     r   r   zBaseSemaphoreTests.test_acquire  sr    ll1ooll1oor   c                 X    |                                  }|                                 ~d S r   )r   rC   r   s     r   rD   z'BaseSemaphoreTests.test_acquire_destroy  s#    llnnCCr   c                    |                      d                                           g g dfd}t          |d          }|                                 t	                    t	                    z   dk     r1t                       t	                    t	                    z   dk     1|                     z   dgdz             dt          d          D ]}                                 t	                    t	                    z   dk     r1t                       t	                    t	                    z   dk     1|                     t          z             dgdz  dgdz  z              dt          d          D ]}                                 t	                    t	                    z   d	k     r1t                       t	                    t	                    z   d	k     1|                     t          z             dgdz  dgdz  z   dgdz  z              | 
                                        d
                                                      |                                 d S )N   r   c                                                                                                                                                          d S r   rr   )r   r   r   r   s   r   r   z4BaseSemaphoreTests.test_acquire_contended.<locals>.f  sG    KKMMMOOI&&&KKMMMOOI&&&&&r   r      rR      rt      F)r   rC   r   r#   r!   r   r\   r   rG   sortedrS   r%   )r   r   r^   r   r   r   r   r   s       @@@@r   r_   z)BaseSemaphoreTests.test_acquire_contended  so   ll1oo		' 	' 	' 	' 	' 	' 	' 	'
 !RLL	(mmc(mm+a//GGG (mmc(mm+a//H,qcAg666	q 	 	AKKMMMM(mmc(mm+b00GGG (mmc(mm+b008 344qcAga6GHHH	q 	 	AKKMMMM(mmc(mm+b00GGG (mmc(mm+b008 344qcAga6G1#PQ'6QRRRU++,,,	r   c                    |                      d          }|                     |                    d                     |                     |                    d                     |                     |                    d                     |                                 |                     |                    d                     d S )Nrt   F)r   rK   rC   rS   rG   r   s     r   rL   z#BaseSemaphoreTests.test_try_acquire  s    ll1ooE**+++E**+++U++,,,E**+++++r   c                    |                      d                                           g fd}t          |d                                           |                     t                    dgdz  dgdz  z              d S )N   c                                                                d                                                               d                     d S rJ   rO   )r   r   s   r   r   z8BaseSemaphoreTests.test_try_acquire_contended.<locals>.f  sE    NN3;;u--...NN3;;u--.....r   rW   Fr   Tr   )r   rC   r   r%   r\   r   )r   r   r   r   s     @@r   rU   z-BaseSemaphoreTests.test_try_acquire_contended  s    ll1oo	/ 	/ 	/ 	/ 	/ 	/ 	a%%''' 	5'A+!*CDDDDDr   c                 J   |                                                                   fd}t          |d          }|                                 t	                       |                     |j                                                    |                                 d S )Nc                  X                                                                         d S r   rY   )r   s   r   r   z0BaseSemaphoreTests.test_default_value.<locals>.f  s!    KKMMMKKMMMMMr   rR   )	r   rC   r   r#   r   rS   r   rG   r%   )r   r   r^   r   s      @r   test_default_valuez%BaseSemaphoreTests.test_default_value  s    llnn	 	 	 	 	 !QKK	$$$	r   c                                           d          d fd	} |                                                      d                                                                           t
          |t
                                                              d                                                      d S )Nrt   c                 D   5                                           d                                                      5                                          d                     | r| 	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S rJ   )rK   rC   rG   rS   )rc   r   r   s    r   rd   z+BaseSemaphoreTests.test_with.<locals>._with  s%    " "E 2 2333 " "$$S[[%7%7888 "!	"" " " " " " " " " " " " " " "" " " " " " " " " " " " " " " " " "s5   ?B-A=1B=B	BB	BBBFr   )r   rK   rC   rG   re   rf   )r   rd   r   s   ` @r   rg   zBaseSemaphoreTests.test_with  s    ll1oo	" 	" 	" 	" 	" 	" 	" 	E**+++)UI666E**+++r   N)r)   r*   r+   r,   r   rA   r   rD   r_   rL   rU   r   rg   r
   r   r   r   r     s         $ $ $X X X    
! ! !F, , ,E E E      r   r   c                       e Zd ZdZd ZdS )SemaphoreTestsz)
    Tests for unbounded semaphores.
    c                     |                      d          }|                                 |                                 |                                 |                                 d S NrR   )r   rG   rC   r   s     r   r   z&SemaphoreTests.test_release_unacquired%  sI    ll1oor   Nr)   r*   r+   r,   r   r
   r   r   r   r      s-             r   r   c                       e Zd ZdZd ZdS )BoundedSemaphoreTestsz'
    Tests for bounded semaphores.
    c                     |                                  }|                     t          |j                   |                                 |                                 |                     t          |j                   d S r   )r   re   r   rG   rC   r   s     r   r   z-BoundedSemaphoreTests.test_release_unacquired3  s_    llnn*ck222*ck22222r   Nr   r
   r   r   r   r   .  s-         3 3 3 3 3r   r   c                   p    e Zd ZdZdZdZd Zd Zd Zd Z	dd	Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd ZdS )BarrierTestsz$
    Tests for Barrier objects.
    rW   r   c                 R    |                      | j        | j                  | _        d S )Ntimeout)barriertyper]   defaultTimeoutbarrierr"   s    r   r2   zBarrierTests.setUpB  s%    ''8K'LLr   c                 8    | j                                          d S r   )r   abortr"   s    r   r6   zBarrierTests.tearDownD  s    r   c                 r    t          || j        dz
            } |             |                                 d S r   )r   r]   r%   )r   r   r^   s      r   run_threadszBarrierTests.run_threadsG  s:    !TVAX		r   c                 |   | j         j        }|                     || j                   t	          |          D ]}|d                             d           |                     t          |d                   ||z             | j                                          |d                             d           |                     t          |d                   |dz   |z             | j                                          |                     | j         j        d           | 	                    | j         j
                   d S )Nr   TrR   )r   partiesr\   r]   r   r   r!   r   	n_waitingrS   broken)r   r   r   mis        r   	multipasszBarrierTests.multipassL  s   L DF###q 	  	 AAJd###S__a!e444LAJd###S__q1uk:::L/333,-----r   rR   c                 L     g g g fd}                      |           dS )z;
        Test that a barrier is passed in lockstep
        c                  4                                     d S r   )r   )passesr   r   s   r   r   z$BarrierTests.test_barrier.<locals>.f^  s    NN7F+++++r   Nr   )r   r   r   r   s   `` @r   test_barrierzBarrierTests.test_barrierY  sM     r(	, 	, 	, 	, 	, 	, 	,r   c                 ,    |                      d          S )zC
        Test that a barrier works for 10 consecutive runs
        r   )r   r"   s    r   test_barrier_10zBarrierTests.test_barrier_10b  s       $$$r   c                      g  fd}                      |                                t                    t          t           j                                       dS )z9
        test the return value from barrier.wait
        c                  d    j                                         }                     |            d S r   )r   r   r   )r   r   r   s    r   r   z(BarrierTests.test_wait_return.<locals>.fm  s.    !!##ANN1r   N)r   r\   sumr   r]   )r   r   r   s   ` @r   test_wait_returnzBarrierTests.test_wait_returnh  sq     	 	 	 	 	 	 	Ws5=='9'9:::::r   c                      g fd}                       j        |           fd}                     |           dS )z,
        Test the 'action' callback
        c                  2                          d           d S r'   )r   )r   s   r   actionz(BarrierTests.test_action.<locals>.actiony  s    NN4     r   c                  v                                                           t                    d           d S r   )r   r\   r!   )r   r   r   s   r   r   z#BarrierTests.test_action.<locals>.f|  s2    LLNNNS\\1-----r   Nr   r]   r   )r   r  r   r   r   s   `  @@r   test_actionzBarrierTests.test_actiont  s{     	! 	! 	! 	! 	!""46622	. 	. 	. 	. 	. 	. 	. 	r   c                 &    g g  fd}                      |                                t                    d                                t                     j        dz
                                   j        j                   dS )zK
        Test that an abort will put the barrier in a broken state
        c                  b   	 j                                         } | j        dz  k    rt          j                                                              d           d S # t
          j        $ r                     d           Y d S t          $ r j                                          Y d S w xY wNrt   T)r   r   r]   r   r   rk   BrokenBarrierErrorr   )r   r   r   r   s    r   r   z"BarrierTests.test_abort.<locals>.f  s    	%L%%''	>>&&!!###%%%%%/ & & &%%%%%% % % %""$$$$$$%s   AA! !$B."B.-B.r   rR   N)r   r\   r!   r]   rK   r   r   )r   r   r   r   s   ` @@r   
test_abortzBarrierTests.test_abort  s     
	% 
	% 
	% 
	% 
	% 
	% 
	% 	X***Xq111+,,,,,r   c                 @    g g g  fd}                      |                                t                    d                                t                     j        dz
                                  t                     j                   dS )zL
        Test that a 'reset' on a barrier frees the waiting threads
        c                  "   j                                         } | j        dz  k    r^j         j        j        dz
  k     r,t	          j        d           j         j        j        dz
  k     ,j                                          nZ	 j                                                              d           n*# t          j	        $ r                     d           Y nw xY wj                                                              d           d S )Nrt   rR   gMbP?T)
r   r   r]   r   r   r	   resetr   rk   r  )r   r   r   results3r   s    r   r   z"BarrierTests.test_reset.<locals>.f  s   !!##ADFAI~~l,tvax77Ju%%% l,tvax77""$$$$*L%%'''OOD)))) 3 * * *OOD)))))* LOOD!!!!!s   .B7 7$CCr   rR   N)r   r\   r!   r]   )r   r   r   r   r  s   ` @@@r   
test_resetzBarrierTests.test_reset  s     	" 	" 	" 	" 	" 	" 	" 	"" 	X***Xq111X/////r   c                 x    g g g                        j                   fd}                     |                                t	                    d                                t	                     j        dz
                                  t	                     j                   dS )zF
        Test that a barrier can be reset after being broken.
        c                  V   	 j                                         } | j        dz  k    rt          j                                                              d           nN# t
          j        $ r                     d           Y n(t          $ r j                                          Y nw xY w                                j        dz  k    rj                                                                           j                                                              d           d S r  )	r   r   r]   r   r   rk   r  r   r  )r   barrier2r   r   r  r   s    r   r   z,BarrierTests.test_abort_and_reset.<locals>.f  s#   	%L%%''	>>&&!!###%%%%/ & & &%%%%% % % %""$$$$$% }}$&!)++""$$$MMOOOLOOD!!!!!s   AA   $B+"B+*B+r   rR   N)r   r]   r   r\   r!   )r   r   r  r   r   r  s   ` @@@@r   test_abort_and_resetz!BarrierTests.test_abort_and_reset  s     ##DF++	" 	" 	" 	" 	" 	" 	" 	" 	"* 	X***Xq111X/////r   c                 <      fd}                      |           dS )z$
        Test wait(timeout)
        c                      j                                         } | j        dz  k    rt          j        d                               t          j        j         j        d           d S )Nrt         ?g      ?)r   r   r]   r   r	   re   rk   r  )r   r   s    r   r   z$BarrierTests.test_timeout.<locals>.f  se    !!##ADFaK
3i:"l/6 6 6 6 6r   Nr   )r   r   s   ` r   r   zBarrierTests.test_timeout  s8    	6 	6 	6 	6 	6 	r   c                 x                            j        d           fd}                     |           dS )z4
        Test the barrier's default timeout
        g333333?r   c                                                       } | j        dz  k    rt          j        d                               t
          j        j                    d S )Nrt   r  )r   r]   r   r	   re   rk   r  )r   r   r   s    r   r   z,BarrierTests.test_default_timeout.<locals>.f  sO    ADFaK
3i:GLIIIIIr   Nr
  )r   r   r   s   ` @r   test_default_timeoutz!BarrierTests.test_default_timeout  s`    
 ""463"77	J 	J 	J 	J 	J 	J 	r   c                     |                      d          }|                                 |                                 d S r   )r   r   )r   r^   s     r   test_single_threadzBarrierTests.test_single_thread  s3    Q		r   N)rR   )r)   r*   r+   r,   r]   r   r2   r6   r   r   r   r  r  r  r  r  r  r   r  r!  r
   r   r   r   r   ;  s         	
ANM M M    
. . .   % % %
; 
; 
;  - - -.0 0 0< 0  0  0D        r   r   __main__zSThis module contains no tests; it is used by other test cases like test_threading_2)r,   r   r   threadr   r   ImportError_threadrk   unittestgevent.testingr   gevent.testing.testcaser   r   objectr   TestCaser.   r8   ro   r|   r   r   r   r   r   r   r)   printr
   r   r   <module>r,     s    


 4222222222 4 4 433333333334      " " " " " " 3 3 3 3 3 3  $ $ $ $ $F $ $ $N         ?H$5      Q8 Q8 Q8 Q8 Q8L Q8 Q8 Q8h! ! ! ! ! ! ! !H3+ 3+ 3+ 3+ 3+ 3+ 3+ 3+lH H H H H H H HVk6 k6 k6 k6 k6\ k6 k6 k6\r r r r r r r rh    '   3 3 3 3 3. 3 3 3} } } } }< } } }@ z	E
_````` s    %%