
    <|hbU                        d 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
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       yy# e$ r ddlmZmZ Y w xY w)z/
Various tests for synchronization primitives.
    N)start_new_thread	get_ident)support)TimeAssertMixinc                  .    t        j                  d       y )Ng{Gz?)timesleep     V/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/tests/lock_tests.py_waitr      s    JJtr   c                   *    e Zd ZdZddZd Zd Zd Zy)Bunchz
    A bunch of threads.
    c                       _         | _        g  _        g  _        |  _         fd}t        |      D ]  }t        |d        y)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                  f   t               } j                  j                  |        	          j                  j                  |        j                  st                j                  sy y # j                  j                  |        j                  st                j                  sw w xY wN)r   startedappendfinished	_can_exitr   )tidfselfs    r   taskzBunch.__init__.<locals>.task$   sx    +CLL$$$S)..G .. $$S)..G ..s   A/ />B0.B0r
   N)r   nr   r   r   ranger   )r   r   r   wait_before_exitr   _s   ``    r   __init__zBunch.__init__   sO     --	 q 	'AT2&	'r   c                     t        | j                        | j                  k  r.t                t        | j                        | j                  k  r-y y r   )lenr   r   r   r   s    r   wait_for_startedzBunch.wait_for_started0   s3    $,,$&&(G $,,$&&(r   c                     t        | j                        | j                  k  r.t                t        | j                        | j                  k  r-y y r   )r!   r   r   r   r"   s    r   wait_for_finishedzBunch.wait_for_finished4   s3    $-- 466)G $-- 466)r   c                     d| _         y 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y)BaseTestCasec                 6    t        j                         | _        y r   )r   threading_setup_threadsr"   s    r   setUpzBaseTestCase.setUp=   s    //1r   c                 d    t        j                  | j                    t        j                          y r   )r   threading_cleanupr1   reap_childrenr"   s    r   tearDownzBaseTestCase.tearDown@   s     !!4==1r   N)r)   r*   r+   r2   r6   r
   r   r   r.   r.   <   s    2 r   r.   c                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)BaseLockTestsz;
    Tests for both recursive and non-recursive locks.
    c                     t               r   NotImplementedErrorr"   s    r   locktypezBaseLockTests.locktypeJ       !##r   c                 &    | j                         }~y r   )r<   r   locks     r   test_constructorzBaseLockTests.test_constructorM   s    }}r   c                 F    | j                         }|j                          ~y r   )r<   acquirer?   s     r   test_acquire_destroyz"BaseLockTests.test_acquire_destroyQ   s    }}r   c                 f    | j                         }|j                          |j                          ~y r   r<   rC   releaser?   s     r   test_acquire_releasez"BaseLockTests.test_acquire_releaseV   s"    }}r   c                     | j                         }| j                  |j                  d             |j                          y NF)r<   
assertTruerC   rG   r?   s     r   test_try_acquirezBaseLockTests.test_try_acquire\   s+    }}U+,r   c                     | j                         j                          g fd}t        |d      j                          | j	                  d          j                          y )Nc                  F    j                   j                  d             y 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   sN    }}	/a%%'#r   c                 t   | j                         j                          d}fd}t        ||      }|j                          t	                | j                  t        |j                        d       j                          |j                          | j                  t        |j                        |       y )N   c                  F     j                           j                          y r   rC   rG   r@   s   r   r   z/BaseLockTests.test_acquire_contended.<locals>.fo       LLNLLNr   r   )
r<   rC   r   r#   r   assertEqualr!   r   rG   r%   )r   Nr   br@   s       @r   test_acquire_contendedz$BaseLockTests.test_acquire_contendedk   s    }}	 !QK	QZZ!,	QZZ!,r   c                     | j                         fd}dfd	} |        t        |d      j                          | j                  t        |t               t        |d      j                          y )Nc                  F     j                           j                          y r   rY   rZ   s   r   r   z"BaseLockTests.test_with.<locals>.f}   r[   r   c                 >    5  | | 	 d d d        y # 1 sw Y   y xY w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{   sU    }}		 	a%%')UI6a%%'r   c                     | j                         fd}t        t        j                               }t	        |d      j                          | j                  |t        t        j                                      y )Nc                  F     j                           j                          y 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 3 567r   N)r)   r*   r+   r,   r<   rA   rD   rH   rL   rU   r_   rg   rm   r
   r   r   r8   r8   E   s4    $

- ( 8r   r8   c                       e Zd ZdZd Zd Zy)	LockTestszn
    Tests for non-recursive, weak locks
    (which can be acquired and released from different threads).
    c                 \   | j                         g fd}t        |d       st                st                | j                  t	              d       j                          t	              dk(  rt                t	              dk(  r| j                  t	              d       y )Nc                       j                          j                  d         j                          j                  d        y r   rC   r   )r@   phases   r   r   z#LockTests.test_reacquire.<locals>.f   s-    LLNLLLLNLLr   r
   rR      )r<   r   r   r\   r!   rG   )r   r   r@   rs   s     @@r   test_reacquirezLockTests.test_reacquire   s    }}	
 	BG UQ'%jAoG %jAoUQ'r   c                     | j                         j                          fd}t        |d      }|j                          j                          j	                          y )Nc                  &     j                          y r   )rG   rZ   s   r   r   z*LockTests.test_different_thread.<locals>.f       LLNr   rR   )r<   rC   r   r%   rG   r   r   r^   r@   s      @r   test_different_threadzLockTests.test_different_thread   sE    }}	!QK	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y)
RLockTestsz$
    Tests for recursive locks.
    c                     | j                         }|j                          |j                          |j                          |j                          |j                          |j                          y r   rF   r?   s     r   ru   zRLockTests.test_reacquire   sC    }}r   c                 d   | j                         }| j                  t        |j                         |j	                          |j	                          |j                          |j	                          |j                          |j                          | j                  t        |j                         y r   )r<   re   RuntimeErrorrG   rC   r?   s     r   test_release_unacquiredz"RLockTests.test_release_unacquired   sk    }},5,5r   c                     | j                         fd}t        |dd      }	 | j                  t        j                         |j                          y # |j                          w xY w)Nc                  &     j                          y 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   sM    }}	!Q	lDLL9KKMAKKMs    A A(c                 J   | j                         | j                  j                                j                          | j	                  j                                j                          | j	                  j                                g fd}t        |d      j                          | j                  d          j                          | j	                  j                                j                          | j                  j                                y )Nc                  D    j                   j                                y 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   s    }})*()()	,a%%'#())*r   N)r)   r*   r+   r,   ru   r   rz   r   r
   r   r   r|   r|      s    
6	+r   r|   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)
EventTestsz"
    Tests for Event objects.
    c                     t               r   r:   r"   s    r   	eventtypezEventTests.eventtype   r=   r   c                    | j                         }| j                  |j                                |j                          | j	                  |j                                |j                          | j	                  |j                                |j                          | j                  |j                                |j                          | j                  |j                                y 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        ||      }|j                          t                | j                  t	              d       j                          |j                          | j                  dg|z         | j                  dg|z         y )NrW   c                       j                          j                   j                                 j                          j                   j                                y r   )waitr   r   )r   results1results2s   r   r   z#EventTests._check_notify.<locals>.f  s9    HHJOOCJJL)HHJOOCJJL)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    	*
 !QK	X*		D6A:.D6A:.r   c                     | j                         }| j                  |       |j                          |j                          | j                  |       y r   )r   r   r   r   r   s     r   test_notifyzEventTests.test_notify  s<    nn3			3r   c                    | j                         g g d}fd}t        ||      j                          | j                  dg|z         D ])  \  }}| j	                  |       | j                  |dd       + g g j                          t        ||      j                          | j                  dg|z         D ]  \  }}| j                  |        y )NrW   c                  $   j                  d       j                  j                                t        j                         } j                  d       j                         }t        j                         }j                  ||| z
  f       y )Ng        皙?)r   r   r   r   )t1rt2r   r   r   s      r   r   z"EventTests.test_timeout.<locals>.f'  s`    HHSMOOCJJL)BHHSM

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;/ 	5EArQ&&r44	5 	a%%'D6A:. 	EArOOA	r   N)	r)   r*   r+   r,   r   r   r   r   r   r
   r   r   r   r      s     $
'/& r   r   c                   :    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
y	)
ConditionTestsz(
    Tests for condition variables.
    c                     t               r   r:   r   argss     r   condtypezConditionTests.condtypeC  r=   r   c                 |   | j                         }|j                          |j                          |j                          |j                          t        j                         }| j                  |      }|j                          | j                  |j                  d             |j                          | j                  |j                  d             | j                  |j                  d             |j                          |5  | j                  |j                  d             d d d        y # 1 sw Y   y xY wrJ   )r   rC   rG   rk   LockrS   rK   )r   condr@   s      r   test_acquirezConditionTests.test_acquireF  s    }} 	~~}}T"e,-U+,e,- 	2T\\%01	2 	2 	2s   !D22D;c                 d    | j                         }| j                  t        |j                         y r   )r   re   r   r   r   r   s     r   test_unacquired_waitz#ConditionTests.test_unacquired_waitZ  s!    }},		2r   c                 d    | j                         }| j                  t        |j                         y r   )r   re   r   notifyr   s     r   test_unacquired_notifyz%ConditionTests.test_unacquired_notify^  s!    }},4r   c                 l   d}g g dfd}t        ||      }|j                          t                | j                  g        j	                          j                  d       t                dj                          t              dk  rt                t              dk  r| j                  dgdz         | j                  g        j	                          j                  d       t                dj                          t              t              z   dk  r%t                t              t              z   dk  r%| j                  dgdz  dgdz  z          | j                  dgdz         j	                          j                          t                dj                          t              dk  rt                t              dk  r| j                  dgdz  dgdz  z          | j                  dgdz  dgdz  z          |j                          y )NrW   r   c                  
    j                           j                           j                          j                          j                           j                           j                          j                         y r   )rC   r   rG   r   )r   	phase_numr   r   s   r   r   z'ConditionTests._check_notify.<locals>.fg  sQ    LLNIIKLLNOOI&LLNIIKLLN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   		' !QK	2&A	(maG (maA37+2&A	(mc(m+a/G (mc(m+a/A37aS1W#45A37+	(maG (maA37aS1W#45A37aS1W#45	r   c                 h    | j                         }| j                  |       | j                  |       y r   )r   r   r   s     r   r   zConditionTests.test_notify  s)    }}4 4 r   c                     | j                         g d}fd}t        ||      j                          | j                  t	              d       D ]  }| j                  |dd        y )NrW   c                      j                          t        j                         } j                  d       t        j                         }j                          j	                  || z
         y )Nr   )rC   r   r   rG   r   )r   r   r   resultss     r   r   z&ConditionTests.test_timeout.<locals>.f  sF    LLNBIIcNBLLNNN27#r   gRQ?       @)r   r   r%   r\   r!   r   )r   r]   r   r   r   r   s       @@r   r   zConditionTests.test_timeout  sf    }}	$ 	a%%'Wq) 	6B&&r45	6r   N)r)   r*   r+   r,   r   r   r   r   r   r   r   r
   r   r   r   r   >  s+    $2(350d!6r   r   c                   F    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)BaseSemaphoreTestszB
    Common tests for {bounded, unbounded} semaphore objects.
    c                     t               r   r:   r   s     r   semtypezBaseSemaphoreTests.semtype  r=   r   c                     | j                  t        | j                  d       | j                  t        t        f| j                  t	        t
        dt	        t
        dd                     y )N)valuemaxintmaxsize)re   
ValueErrorr   OverflowErrorgetattrsysr"   s    r   rA   z#BaseSemaphoreTests.test_constructor  sU    *dll"=:}5t||!(hYPT8U!V V 	 	Xr   c                    | j                  d      }|j                          |j                          | j                  d      }|j                          |j                          |j                          |j                          y )NrR   rt   )r   rC   rG   r   sems     r   r   zBaseSemaphoreTests.test_acquire  sR    ll1oll1or   c                 F    | j                         }|j                          ~y r   )r   rC   r   s     r   rD   z'BaseSemaphoreTests.test_acquire_destroy  s    llnr   c                    | j                  d      j                          g g dfd}t        |d      }|j                          t	              t	              z   dk  r%t                t	              t	              z   dk  r%| j                  z   dgdz         dt        d      D ]  }j                           t	              t	              z   dk  r%t                t	              t	              z   dk  r%| j                  t        z         dgdz  dgdz  z          dt        d      D ]  }j                           t	              t	              z   d	k  r%t                t	              t	              z   d	k  r%| j                  t        z         dgdz  dgdz  z   dgdz  z          | j                  j                  d
             j                          |j                          y )N   r   c                      j                          j                          j                          j                          y r   rr   )r   r   r   r   s   r   r   z4BaseSemaphoreTests.test_acquire_contended.<locals>.f  s-    KKMOOI&KKM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  s   ll1o		'
 !RL	(mc(m+a/G (mc(m+a/H,qcAg6	q 	AKKM	(mc(m+b0G (mc(m+b08 34qcAga6GH	q 	AKKM	(mc(m+b0G (mc(m+b08 34qcAga6G1#PQ'6QRU+,	r   c                 F   | j                  d      }| j                  |j                  d             | j                  |j                  d             | j                  |j                  d             |j	                          | j                  |j                  d             y )Nrt   F)r   rK   rC   rS   rG   r   s     r   rL   z#BaseSemaphoreTests.test_try_acquire  sn    ll1oE*+E*+U+,E*+r   c                     | j                  d      j                          g fd}t        |d      j                          | j	                  t              dgdz  dgdz  z          y )N   c                       j                  j                  d              j                  j                  d             y rJ   rO   )r   r   s   r   r   z8BaseSemaphoreTests.test_try_acquire_contended.<locals>.f  s-    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^    ll1o	/ 	a%%' 	5'A+!*CDr   c                    | j                         j                          fd}t        |d      }|j                          t	                | j                  |j                         j                          |j                          y )Nc                  F     j                           j                          y r   rY   )r   s   r   r   z0BaseSemaphoreTests.test_default_value.<locals>.f  s    KKMKKMr   rR   )	r   rC   r   r#   r   rS   r   rG   r%   )r   r   r^   r   s      @r   test_default_valuez%BaseSemaphoreTests.test_default_value  sa    lln	 !QK	$	r   c                 <     j                  d      d fd	} |         j                  j                  d             j                           j	                  t
        |t
                j                  j                  d             j                          y )Nrt   c                    5  j                  j                  d             j                          5  j                  j                  d             | r| 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wrJ   )rK   rC   rG   rS   )rc   r   r   s    r   rd   z+BaseSemaphoreTests.test_with.<locals>._with  sz     "E 23 "$$S[[%78!	 "" "" "" "s"   3A:%A.A:.A7	3A::BFr   )r   rK   rC   rG   re   rf   )r   rd   r   s   ` @r   rg   zBaseSemaphoreTests.test_with  sj    ll1o	" 	E*+)UI6E*+r   N)r)   r*   r+   r,   r   rA   r   rD   r_   rL   rU   r   rg   r
   r   r   r   r     s7    $X
!F,Er   r   c                       e Zd ZdZd Zy)SemaphoreTestsz)
    Tests for unbounded semaphores.
    c                     | j                  d      }|j                          |j                          |j                          |j                          y NrR   )r   rG   rC   r   s     r   r   z&SemaphoreTests.test_release_unacquired%  s3    ll1or   Nr)   r*   r+   r,   r   r
   r   r   r   r      s    r   r   c                       e Zd ZdZd Zy)BoundedSemaphoreTestsz'
    Tests for bounded semaphores.
    c                     | j                         }| j                  t        |j                         |j	                          |j                          | j                  t        |j                         y r   )r   re   r   rG   rC   r   s     r   r   z-BoundedSemaphoreTests.test_release_unacquired3  sG    lln*ckk2*ckk2r   Nr   r
   r   r   r   r   .  s    3r   r   c                   n    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y)BarrierTestsz$
    Tests for Barrier objects.
    rW   r   c                 \    | j                  | j                  | j                        | _        y )Ntimeout)barriertyper]   defaultTimeoutbarrierr"   s    r   r2   zBarrierTests.setUpB  s#    ''8K8K'Lr   c                 8    | j                   j                          y r   )r   abortr"   s    r   r6   zBarrierTests.tearDownD  s    r   c                 d    t        || j                  dz
        } |        |j                          y r   )r   r]   r%   )r   r   r^   s      r   run_threadszBarrierTests.run_threadsG  s'    !TVVAX		r   c                 `   | j                   j                  }| j                  || j                         t	        |      D ]  }|d   j                  d       | j                  t        |d         ||z         | j                   j                          |d   j                  d       | j                  t        |d         |dz   |z         | j                   j                           | j                  | j                   j                  d       | j                  | j                   j                         y )Nr   TrR   )r   partiesr\   r]   r   r   r!   r   	n_waitingrS   broken)r   r   r   mis        r   	multipasszBarrierTests.multipassL  s    LL  DFF#q 	 AAJd#S_a!e4LLAJd#S_q1uk:LL	  	//3,,-r   c                 B     g g g fd} j                  |       y)z;
        Test that a barrier is passed in lockstep
        c                  *    j                          y 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  s!     r(	,r   c                 $    | j                  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} j                  |        j                  t              t        t         j                                     y)z9
        test the return value from barrier.wait
        c                  \    j                   j                         } j                  |        y 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  s@     	 	Ws5='9:r   c                      g fd} j                   j                  |       fd} j                  |       y)z,
        Test the 'action' callback
        c                  (     j                  d       y r'   )r   )r   s   r   actionz(BarrierTests.test_action.<locals>.actiony  s    NN4 r   c                  \     j                          j                  t              d       y r   )r   r\   r!   )r   r   r   s   r   r   z#BarrierTests.test_action.<locals>.f|  s     LLNS\1-r   Nr   r]   r   )r   r  r   r   r   s   `  @@r   test_actionzBarrierTests.test_actiont  s:     	!""46662	. 	r   c                     g g  fd} j                  |        j                  t              d        j                  t               j                  dz
          j	                   j
                  j                         y)zK
        Test that an abort will put the barrier in a broken state
        c                  ^   	 j                   j                         } | j                  dz  k(  rt        j                   j                          j	                  d       y # t
        j                  $ r j	                  d       Y y t        $ r j                   j                          Y y 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    	%LL%%'	>&&!!#%// &% %""$%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  sj     
	% 	X*Xq1++,r   c                     g g g  fd} j                  |        j                  t              d        j                  t               j                  dz
          j                  t               j                         y)zL
        Test that a 'reset' on a barrier frees the waiting threads
        c                  Z   j                   j                         } | j                  dz  k(  r}j                   j                  j                  dz
  k  r<t	        j
                  d       j                   j                  j                  dz
  k  r<j                   j                          n,	 j                   j                          j                  d       j                   j                          j                  d       y # t        j                  $ r j                  d       Y Rw xY w)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DFFAI~ll,,tvvax7JJu% ll,,tvvax7""$*LL%%'OOD) LLOOD!	 !33 *OOD)*s   ,+D $D*)D*r   rR   N)r   r\   r!   r]   )r   r   r   r   r  s   ` @@@r   
test_resetzBarrierTests.test_reset  sq     	"" 	X*Xq1X/r   c                 T    g g g  j                   j                         fd} j                  |        j                  t	              d        j                  t	               j                  dz
          j                  t	               j                         y)zF
        Test that a barrier can be reset after being broken.
        c                  H   	 j                   j                         } | j                  dz  k(  rt        j                   j                          j	                  d       j                         j                  dz  k(  rj                   j                          j                          j                   j                          j	                  d       y # t
        j                  $ r j	                  d       Y t        $ r j                   j                          Y w xY w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    	%LL%%'	>&&!!#% }}$&&!)+""$MMOLLOOD! // &% %""$%s   AC $D!<"D! D!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     ##DFF+	" 	"* 	X*Xq1X/r   c                 2      fd} j                  |       y)z$
        Test wait(timeout)
        c                      j                   j                         } | j                  dz  k(  rt        j                  d       j                  t        j                  j                   j                  d       y )Nrt         ?g      ?)r   r   r]   r   r	   re   rk   r  )r   r   s    r   r   z$BarrierTests.test_timeout.<locals>.f  sU    !!#ADFFaK

3i::"ll//6r   Nr   )r   r   s   ` r   r   zBarrierTests.test_timeout  s    	6 	r   c                 p      j                   j                  d       fd} j                  |       y)z4
        Test the barrier's default timeout
        g333333?r   c                      j                         } | j                  dz  k(  rt        j                  d       j	                  t
        j                  j                          y )Nrt   r  )r   r]   r   r	   re   rk   r  )r   r   r   s    r   r   z,BarrierTests.test_default_timeout.<locals>.f  sC    ADFFaK

3i::GLLIr   Nr
  )r   r   r   s   ` @r   test_default_timeoutz!BarrierTests.test_default_timeout  s4    
 ""4663"7	J 	r   c                 f    | j                  d      }|j                          |j                          y r   )r   r   )r   r^   s     r   test_single_threadzBarrierTests.test_single_thread  s$    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
.%
;-.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   " 3$F $N ?H$5$5  Q8L Q8h! !H3+ 3+lH HVk6\ k6\r rh' 3. 3}< }@ z	
_` e  4334s   B> >CC