
    6bh                        	 d dl Z d dlZd dlZd dlmZmZ d dlZd dlZd dlZd dl	m
Z
 d dlmZ  ej                  e
j                  d      Zd Z G d de      Z G d	 d
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y)    N)start_new_threadTIMEOUT_MAX)support)threading_helperz9platform doesn't support fork (no _at_fork_reinit method)c                 4    t        j                  d| z         y )N{Gz?)timesleep)nthreads    9/opt/python-3.12.12/usr/lib/python3.12/test/lock_tests.pywait_threads_blockedr      s     	JJuw    c                   .    e Zd Z	 ddZd Zd Zd Zd Zy)Bunchc                 j    	 || _         || _        g | _        g | _        g | _        | | _        d | _        y N)funcr   startedfinished
exceptions	_can_exit_wait_thread)selfr   r   wait_before_exits       r   __init__zBunch.__init__    s>    	
 	-- r   c                 4   t        j                         }| j                  j                  |       	 | j	                          | j                  j                  |       t        j                  t        j                        D ]  }| j                  s y  y # t
        $ r%}| j                  j                  |       Y d }~{d }~ww xY w# | j                  j                  |       t        j                  t        j                        D ]  }| j                  s w  w xY wr   )	threading	get_identr   appendr   BaseExceptionr   r   r   sleeping_retrySHORT_TIMEOUTr   )r   tidexc_s       r   taskz
Bunch.task.   s    !!#C 	IIK MM  %++G,A,AB>> C	  	(OO""3''	( MM  %++G,A,AB>> Cs0   B 	CB<7C <CC ADDc                    t        j                  t        j                        | _        | j                  j                          	 t        | j                        D ]  }t        | j                  d        	 t        j                  t        j                        D ]'  }t        | j                        | j                  k\  s& | S  | S #  d| _
         xY w)N T)r   wait_threads_exitr   r"   r   	__enter__ranger   r   r&   r   r!   lenr   )r   r%   s     r   r*   zBunch.__enter__;   s    ,>>w?T?TU##%	4<<( B/ ) ''(=(=>A4<< DLL0	 ? 	!DNs   0C 
Cc                 2   t        j                  t         j                        D ]&  }t        | j                        | j
                  k\  s& n | j                  j                  d d d        | j                  }d | _        |rt        | j                   d|      y )Nz threads raised exceptions)r   r!   r"   r,   r   r   r   __exit__r   ExceptionGroupr   )r   exc_type	exc_value	tracebackr%   r   s         r   r.   zBunch.__exit__L   s    ''(=(=>A4==!T\\1 ?
 	""4t4 __
 DII;.H!I!+- - r   c                     d| _         y NT)r   r   s    r   	do_finishzBunch.do_finish[   s	    r   N)F)__name__
__module____qualname__r   r&   r*   r.   r6   r(   r   r   r   r      s     !"-r   r   c                       e Zd Zd Zd Zd Zy)BaseTestCasec                 6    t        j                         | _        y r   )r   threading_setup_threadsr5   s    r   setUpzBaseTestCase.setUp`   s    (88:r   c                 d    t        j                  | j                    t        j                          y r   )r   threading_cleanupr>   r   reap_childrenr5   s    r   tearDownzBaseTestCase.tearDownc   s     **DMM:r   c                 X    | j                  ||dz         | j                  ||dz         y )Ng333333?g      $@)assertGreaterEqual
assertLess)r   actualexpecteds      r   assertTimeoutzBaseTestCase.assertTimeoutg   s*     	3740r   N)r7   r8   r9   r?   rC   rI   r(   r   r   r;   r;   _   s    ; 1r   r;   c                   b    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 Zd Zd Zd Zy)BaseLockTestsc                     t        j                  t         j                        D ]  }t        |      |k\  s n | j	                  t        |      |       y r   )r   r!   r"   r,   assertEqual)r   phaserH   r%   s       r   
wait_phasezBaseLockTests.wait_phaseu   sB    ''(=(=>A5zX% ? 	UX.r   c                 &    | j                         }~y r   )locktyper   locks     r   test_constructorzBaseLockTests.test_constructor{   s    }}r   c                 \    | j                         }| j                  t        |      d       ~y )Nz<unlocked .* object (.*)?at .*>)rQ   assertRegexreprrR   s     r   	test_reprzBaseLockTests.test_repr   s%    }}d%FGr   c                 |    | j                         }|j                          | j                  t        |      d       ~y )Nz<locked .* object (.*)?at .*>)rQ   acquirerV   rW   rR   s     r   test_locked_reprzBaseLockTests.test_locked_repr   s.    }}d%DEr   c                 F    | j                         }|j                          ~y r   )rQ   rZ   rR   s     r   test_acquire_destroyz"BaseLockTests.test_acquire_destroy   s    }}r   c                 f    | j                         }|j                          |j                          ~y r   rQ   rZ   releaserR   s     r   test_acquire_releasez"BaseLockTests.test_acquire_release   s"    }}r   c                     | j                         }| j                  |j                  d             |j                          y NF)rQ   
assertTruerZ   r`   rR   s     r   test_try_acquirezBaseLockTests.test_try_acquire   s+    }}U+,r   c                     | j                         j                          g fd}t        |d      5  	 d d d        | j                  d          j	                          y # 1 sw Y   .xY w)Nc                  F    j                   j                  d             y rc   r   rZ   rS   results   r   fz3BaseLockTests.test_try_acquire_contended.<locals>.f   s    MM$,,u-.r      r   )rQ   rZ   r   assertFalser`   r   rk   rS   rj   s     @@r   test_try_acquire_contendedz(BaseLockTests.test_try_acquire_contended   sU    }}	/1a[ # [s   A&&A/c                 `   | j                         j                          fd}d}t        ||      5 }t        |       | j	                  t        |j                        d       j                          d d d        | j	                  t        j                        |       y # 1 sw Y   /xY w)Nc                  F     j                           j                          y r   rZ   r`   rS   s   r   rk   z/BaseLockTests.test_acquire_contended.<locals>.f       LLNLLNr      r   )rQ   rZ   r   r   rM   r,   r   r`   )r   rk   NbunchrS   s       @r   test_acquire_contendedz$BaseLockTests.test_acquire_contended   s    }}	 1a[E #S0!4 LLN  	U^^,a0 [s   AB$$B-c                 v   | j                         fd}dfd	}5  	 d d d        t        |d      5  	 d d d        | j                  t              5  5  t        # 1 sw Y   >xY w# 1 sw Y   4xY w# 1 sw Y   nxY w	 d d d        n# 1 sw Y   nxY wt        |d      5  	 d d d        y # 1 sw Y   y xY w)Nc                  F     j                           j                          y r   rr   rs   s   r   rk   z"BaseLockTests.test_with.<locals>.f   rt   r   c                 >    5  | | 	 d d d        y # 1 sw Y   y xY wr   r(   )errrS   s    r   	with_lockz*BaseLockTests.test_with.<locals>.with_lock   s    ?I # s   rl   r   )rQ   r   assertRaises	TypeError)r   rk   r}   rS   s      @r   	test_withzBaseLockTests.test_with   s    }}		   1a[  y) T [
  *)) 1a[ [[s@   AA*BA6A'*A36A?	;BB$B//B8c                 t    | j                         fd}t        |d      5  	 d d d        y # 1 sw Y   y xY w)Nc                  F     j                           j                          y r   rr   rs   s   r   rk   z)BaseLockTests.test_thread_leak.<locals>.f   rt   r      )rQ   r   r   rk   rS   s     @r   test_thread_leakzBaseLockTests.test_thread_leak   s-     }}	 1b\ \\s   .7c                    | j                         | j                  t        j                  dd       | j                  t        j                  d       | j                  t        j                  d       | j                  t        j                  t
        dz          j                  t
               j                          t        j                         }| j                  j                  d             t        j                         }| j                  ||z
  d       g fd}t        |d      5  	 d d d        | j                  d          | j                  d   d	       y # 1 sw Y   3xY w)
NFrl   itimeoutg}Ô%ITru   c                      t        j                         } j                  j                  d             t        j                         }j                  || z
         y )N      ?r   )r	   	monotonicr   rZ   )t1t2rS   resultss     r   rk   z%BaseLockTests.test_timeout.<locals>.f   sB    !BNN4<<<45!BNN27#r   r   r   )rQ   r~   
ValueErrorrZ   OverflowErrorr   r`   r	   r   rd   rF   r   rm   rI   )r   r   r   rk   rS   r   s       @@r   test_timeoutzBaseLockTests.test_timeout   s   }}*dllE1=*dllDA-uE-{QO[)^^Q/0^^R#	$
 1a[ $71:s+ [s   :E..E7c                 z    | j                         }t        j                  |      }| j                   |              y r   )rQ   weakrefrefassertIsNotNoner   rS   r   s      r   test_weakref_existsz!BaseLockTests.test_weakref_exists   s+    }}kk$SU#r   c                     | j                         }t        j                  |      }~t        j                          | j                   |              y r   )rQ   r   r   gccollectassertIsNoner   s      r   test_weakref_deletedz"BaseLockTests.test_weakref_deleted  s7    }}kk$


#% r   N)r7   r8   r9   rO   rT   rX   r[   r]   ra   re   ro   rx   r   r   r   r   r   r(   r   r   rK   rK   p   sM    /


	1$:,6$
!r   rK   c                   0    e Zd Z	 d Zd Zd Zed        Zy)	LockTestsc                 
   | j                         g fd}t        j                         5  t        |d       | j	                  d       j                          | j	                  d       d d d        y # 1 sw Y   y xY w)Nc                       j                          j                  d         j                          j                  d        y r   rZ   r   )rS   rN   s   r   rk   z#LockTests.test_reacquire.<locals>.f  s-    LLNLLLLNLLr   r(   rl      )rQ   r   r)   r   rO   r`   r   rk   rS   rN   s     @@r   test_reacquirezLockTests.test_reacquire  sc    }}	 //1Q#OOE1% LLNOOE1% 211s   AA99Bc                     | j                         j                          fd}t        |d      5  	 d d d        j                          j                          y # 1 sw Y   *xY w)Nc                  &     j                          y r   )r`   rs   s   r   rk   z*LockTests.test_different_thread.<locals>.f&      LLNr   rl   )rQ   rZ   r   r`   r   s     @r   test_different_threadzLockTests.test_different_thread"  sG    }}	1a[  [s   AA'c                 &   | j                         }|j                          | j                  |j                  d             |j                          | j                  |j	                                | j                  |j                  d             y )Nr   r   F)blocking)rQ   rZ   rm   r`   lockedrd   rR   s     r   test_state_after_timeoutz"LockTests.test_state_after_timeout-  se     }}d34'e45r   c                     d }| j                         }|j                           ||       | j                         }|j                          |j                           ||       y )Nc                 D    | j                          | j                          y r   rr   rs   s    r   use_lockz/LockTests.test_at_fork_reinit.<locals>.use_lock9  s     LLNLLNr   )rQ   _at_fork_reinitrZ   )r   r   rS   lock2s       r   test_at_fork_reinitzLockTests.test_at_fork_reinit7  sP    	 }} r   N)r7   r8   r9   r   r   r   requires_forkr   r(   r   r   r   r   	  s*    &(	6  r   r   c                   2    e Zd Z	 d Zd Zd Zd Zd Zd Zy)
RLockTestsc                     | j                         }|j                          |j                          |j                          |j                          |j                          |j                          y r   r_   rR   s     r   r   zRLockTests.test_reacquireO  sC    }}r   c                 d   | j                         }| j                  t        |j                         |j	                          |j	                          |j                          |j	                          |j                          |j                          | j                  t        |j                         y r   )rQ   r~   RuntimeErrorr`   rZ   rR   s     r   test_release_unacquiredz"RLockTests.test_release_unacquiredX  sk    }},5,5r   c                 d   | j                         }| j                  t        |j                         |j	                          |j	                          |j                          |j	                          |j                          |j                          | j                  t        |j                         y r   )rQ   r~   r   _release_saverZ   r`   rR   s     r   test_release_save_unacquiredz'RLockTests.test_release_save_unacquiredd  so    }},(:(:;,(:(:;r   c                      j                          j                  dj                                j                           j                  dj                                j                          j                           j                  dj                                j	                           j                  dj                                j	                          j	                           j                  dj                                g  fd}t        j                         5  t        |d        j                  d        j                  dj                                j                  d         j                  d        j                  dj                                d d d        y # 1 sw Y   y xY w)Nr   rl      r   c                       j                          j                  d        j                  d        j                          j                  d        y )Nr   )rZ   r   rO   r`   )rS   rN   r   s   r   rk   z*RLockTests.test_recursion_count.<locals>.f  s;    LLNLLOOE1%LLNLLr   r(   )
rQ   rM   _recursion_countrZ   r`   r   r)   r   rO   r   r   s   ` @@r   test_recursion_countzRLockTests.test_recursion_countp  sK   }}D1134D1134D1134D1134D1134	 //1Q#OOE1%Q 5 5 78 LLOOE1%Q 5 5 78 211s   1BF<<Gc                    | j                         fd}t        |dd      5 }	 | j                  t        j                         |j                          	 d d d        y # |j                          w xY w# 1 sw Y   y xY w)Nc                  &     j                          y r   )rZ   rs   s   r   rk   z+RLockTests.test_different_thread.<locals>.f  r   r   rl   T)rQ   r   r~   r   r`   r6   )r   rk   rw   rS   s      @r   r   z RLockTests.test_different_thread  se    }}	 1a%"!!,=!	  !	 s"   A5 A A5 A22A55A>c                 Z   | j                         | j                  j                                j                          | j	                  j                                j                          | j	                  j                                g fd}t        |d      5  	 d d d        | j                  d          j                          | j	                  j                                j                          | j                  j                                y # 1 sw Y   |xY w)Nc                  D    j                   j                                y r   )r   	_is_ownedri   s   r   rk   z$RLockTests.test__is_owned.<locals>.f  s    MM$..*+r   rl   r   )rQ   rm   r   rZ   rd   r   r`   rn   s     @@r   test__is_ownedzRLockTests.test__is_owned  s    }})*()()	,1a[ #())* [s   $D!!D*N)	r7   r8   r9   r   r   r   r   r   r   r(   r   r   r   r   K  s&    
6
<!9F
"+r   r   c                   B    e Zd Z	 d Zd Zd Zd Zd Zed        Z	d Z
y)	
EventTestsc                    | j                         }| j                  |j                                |j                          | j	                  |j                                |j                          | j	                  |j                                |j                          | j                  |j                                |j                          | j                  |j                                y r   )	eventtyperm   is_setsetrd   clearr   evts     r   test_is_setzEventTests.test_is_set  s    nn&	

%	

%		&		&r   c                 *   d}g g fd}t        ||      5  t        |       | j                  t              d       j	                          d d d        | j                  dg|z         | j                  dg|z         y # 1 sw Y   6xY w)Nru   c                      j                   j                                j                   j                                y r   )r   wait)r   results1results2s   r   rk   z#EventTests._check_notify.<locals>.f  s'    OOCHHJ'OOCHHJ'r   r   T)r   r   rM   r,   r   )r   r   rv   rk   r   r   s    `  @@r   _check_notifyzEventTests._check_notify  s    	( 1a[ #S]A. GGI  	D6A:.D6A:. [s   7B		B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        ||      5  	 d d d        | j                  dg|z         D ](  \  }}| j                  |       | j	                  |d       * g g j                          t        ||      5  	 d d d        | j                  dg|z         D ]  \  }}| j                  |        y # 1 sw Y   xY w# 1 sw Y   GxY w)Nru   c                      j                  j                  d             t        j                         } j                  d      }t        j                         }j                  ||| z
  f       y )Ng        r   )r   r   r	   r   )r   rr   r   r   r   s      r   rk   z"EventTests.test_timeout.<locals>.f  sP    OOCHHSM*!BA!BOOQRL)r   Fr   T)r   r   rM   rm   rI   r   rd   )r   rv   rk   r   dtr   r   r   s        @@@r   r   zEventTests.test_timeout  s    nn	* 1a[  	E7Q;/EArQr3' 
 	1a[  	D6A:.EArOOA ! [ [s   CC"C"C+c                     | j                         g fd}d}t        ||      5  t        |       j                          j	                          d d d        | j                  dg|z         y # 1 sw Y    xY w)Nc                  b    j                   j                  t        j                               y r   )r   r   r   LONG_TIMEOUT)eventr   s   r   rk   z(EventTests.test_set_and_clear.<locals>.f  s    NN5::g&:&:;<r   ru   T)r   r   r   r   r   rM   )r   rk   rv   r   r   s      @@r   test_set_and_clearzEventTests.test_set_and_clear  sl      	= 1a[ # IIKKKM  	4&1*- [s   ,A44A=c                 p   | j                         }|j                  5  | j                  |j                  j                  d             d d d        |j	                          |j                  5  | j                  |j                  j                  d             d d d        y # 1 sw Y   YxY w# 1 sw Y   y xY wrc   )r   _condrm   rZ   r   r   s     r   r   zEventTests.test_at_fork_reinit  s     nnYYSYY..u56 YYSYY..u56 Y Y Ys   +B ,+B, B),B5c                     | j                         }| j                  t        |      d       |j                          | j                  t        |      d       y )Nz<\w+\.Event at .*: unset>z<\w+\.Event at .*: set>)r   rV   rW   r   r   s     r   rX   zEventTests.test_repr  sA    nnc$@A	c$>?r   N)r7   r8   r9   r   r   r   r   r   r   r   rX   r(   r   r   r   r     s:    
'/( >.& 7 7@r   r   c                   >    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
y	)
ConditionTestsc                 |   | 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rc   )condtyperZ   r`   r   Lockrm   rd   )r   condrS   s      r   test_acquirezConditionTests.test_acquire'  s    }} 	~~}}T"e,-U+,e,-T\\%01 TTs   !D22D;c                 d    | j                         }| j                  t        |j                         y r   )r   r~   r   r   r   r   s     r   test_unacquired_waitz#ConditionTests.test_unacquired_wait:  s!    }},		2r   c                 d    | j                         }| j                  t        |j                         y r   )r   r~   r   notifyr   s     r   test_unacquired_notifyz%ConditionTests.test_unacquired_notify>  s!    }},4r   c                 "  	
 g g 	g 
d	
fd}d}t        ||      5  t        j                  t        j                        D ]  }t	              |k\  s n j                          | j                  	g        d}j                          j                  |       t        |       dj                          t        j                  t        j                        D ]  }t	        	      |k\  s n | j                  	dg|z         | j                  
g        t        j                  t        j                        D ]  }t	              |k\  s n j                          j                  d       t        |       dj                          t        j                  t        j                        D ]!  }t	        	      t	        
      z   ||z   k\  s! n ||z
  }| j                  	dg|z  dg|z  z          | j                  
dg|z         t        j                  t        j                        D ]  }t	              |k\  s n j                          j                          t        |       dj                          t        j                  t        j                        D ]  }t	        
      |k\  s n | j                  	dg|z  dg|z  z          | j                  
dg|z  d	g|z  z          d d d        y # 1 sw Y   y xY w)
Nr   c                  V   j                          j                         j                         } j                          j                  | f       j                          j                         j                         } j                          j                  | f       y r   )rZ   r   r   r`   )rj   r   	phase_numreadyr   r   s    r   rk   z'ConditionTests._check_notify.<locals>.fR  sw    LLNLL#YY[FLLNOOVY/0LLNLL#YY[FLLNOOVY/0r   ru   r   rl   )Trl   r   )Tr   )Tr   )r   r   r!   r"   r,   r   rM   rZ   r   r   r`   
notify_all)r   r   rk   rv   r%   count1count2r   r   r   r   s    `     @@@@r   r   zConditionTests._check_notifyB  s    		1 	1 1a[ ++G,A,ABu:? C KKMXr* FLLNKK ( ILLN++G,A,ABx=F* C X	{V';<Xr* ++G,A,ABu:' C
 LLNKKN # ILLN++G,A,ABx=3x=0QZ@ C ZFX	{V';ykF>R'RSX	{V';< ++G,A,ABu:? C
 LLNOO # ILLN++G,A,ABx=A% C X	{V';ykF>R'RSX	{V';ykF>R'RSA [[s4   5LBL5ALBLA/L
A4L?=LLc                 h    | j                         }| j                  |       | j                  |       y r   )r   r   r   s     r   r   zConditionTests.test_notify  s)    }}4 4 r   c                    | j                         dg fd}d}t        ||      5  	 d d d        | j                  t              |       D ](  \  }}| j	                  |       | j                  |       * y # 1 sw Y   RxY w)Nr   c                      j                          t        j                         } j                        }t        j                         }j	                          j                  || z
  |f       y r   )rZ   r	   r   r   r`   r   )r   rj   r   r   r   r   s      r   rk   z&ConditionTests.test_timeout.<locals>.f  sP    LLN!BYYw'F!BLLNNNBGV,-r   ru   )r   r   rM   r,   rI   rm   )r   rk   rv   r   rj   r   r   r   s        @@@r   r   zConditionTests.test_timeout  s    }}	. 1a[ Wq)!JBr7+ V$ "	 [s   B  B	c                 "     j                         d fd}t        |d      5  t        d      D ]7  }t        j                  d       5  dz  j                          d d d        9 	 d d d        y # 1 sw Y   MxY w# 1 sw Y   y xY w)Nr   c                      5  j                  fd      } j                  |        j                  d       d d d        y # 1 sw Y   y xY w)Nc                       dk(  S N   r(   states   r   <lambda>z8ConditionTests.test_waitfor.<locals>.f.<locals>.<lambda>  s	    uzr   r  )wait_forrd   rM   )rj   r   r   r  s    r   rk   z&ConditionTests.test_waitfor.<locals>.f  s;    '9:'  * s   8AArl   r  r   )r   r   r+   r	   r
   r   )r   rk   ir   r  s   `  @@r   test_waitforzConditionTests.test_waitfor  sp    }}	+ 1a[1X

5!QJEKKM T  [ T [s#   &BA9%
B9B>BBc                 `     j                         dg  fd}t        |d      5  t        d      D ]7  }t        j                  d       5  dz  j                          d d d        9 	 d d d         j                  t              d       y # 1 sw Y   hxY w# 1 sw Y   1xY w)Nr   c                     5  t        j                         } j                  fdd      }t        j                         | z
  } j                  |       j	                  | d       j                  d        d d d        y # 1 sw Y   y xY w)Nc                       dk(  S r   r(   r  s   r   r  z@ConditionTests.test_waitfor_timeout.<locals>.f.<locals>.<lambda>  s	    qr   皙?r   )r	   r   r  rm   rI   r   )r   rj   r   r   r  successs     r   rk   z.ConditionTests.test_waitfor_timeout.<locals>.f  sj    ^^%'8#F^^%*  (""2s+t$ s   A6BBrl   r   r   )r   r   r+   r	   r
   r   rM   r,   )r   rk   r  r   r  r  s   `  @@@r   test_waitfor_timeoutz#ConditionTests.test_waitfor_timeout  s    }}	% 1a[1X

5!QJEKKM T   	Wq)	 T	 [s#   &B$B)
B$B!B$$B-N)r7   r8   r9   r   r   r   r   r   r   r  r  r(   r   r   r   r   "  s2    2&35`TD!%4" *r   r   c                   J    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)BaseSemaphoreTestsc                     | j                  t        | j                  d       | j                  t        | j                  t        j                          y )N)value)r~   r   semtypesysmaxsizer5   s    r   rT   z#BaseSemaphoreTests.test_constructor  s:    *dllB?*dllS[[LIr   c                    | j                  d      }|j                          |j                          | j                  d      }|j                          |j                          |j                          |j                          y )Nrl   r   )r  rZ   r`   r   sems     r   r   zBaseSemaphoreTests.test_acquire  sR    ll1oll1or   c                 F    | j                         }|j                          ~y r   )r  rZ   r  s     r   r]   z'BaseSemaphoreTests.test_acquire_destroy  s    llnr   c                 0  
 d}| j                  |      j                          g g g d

fd}fd}d}t        ||      5  |dz
  } ||       | j                  z   dg|z         d
t	        |      D ]  }j                           |} |||z          | j                  t        z         dg|z  dg|z  z          d
|dz
  }t	        |      D ]  }j                            |||z   |z          | j                  t        z         dg|z  dg|z  z   dg|z  z          | j                  j                  d             d}	j                          d d d        | j                  d	gz   z   	z   z         y # 1 sw Y   )xY w)
N   r   c                      j                  j                                j                          j                  j                                j                          y r   rh   )r   r   r   r  sem_resultss   r   r   z7BaseSemaphoreTests.test_acquire_contended.<locals>.func  sC    s{{}-OOI&s{{}-OOI&r   c                     t        j                  t         j                        D ]  }t              t              z   | k\  s y  y r   r   r!   r"   r,   countr%   r   r   s     r   
wait_countz=BaseSemaphoreTests.test_acquire_contended.<locals>.wait_count  7    ++G,A,ABx=3x=0E9 Cr   
   rl   r   FT)r  rZ   r   rM   r+   r`   sortedrm   )r   	sem_valuer   r"  rv   r   r  r   count3count4r   r   r   r  r  s             @@@@@r   rx   z)BaseSemaphoreTests.test_acquire_contended  s   	ll9%		' 	'	
 4^]FvX01#,? I9% &Fv'VHx$78S6\QC&L8: I!mF6] #v/0VHx$78S6\QC&L8A3<GI S[[/0 FKKM9 < 	6F?V#;f#DE	G= ^s   DFFc                   	
 d}| j                  |      

j                          g g 	d	
fd}	fd}t        |d      5  |dz
  } ||       | j                  	z   dg|z         d|}
j	                  |        |||z          | j                  t        	z         dg|z  dg|z  z          d|dz
  }
j	                  |        |||z   |z          | j                  t        	z         dg|z  dg|z  z   dg|z  z          | j                  
j                  d             
j	                          d d d        y # 1 sw Y   y xY w)	Nr  r   c                      j                          j                          j                          j                          y r   r   )r   r   r   r  s   r   r   z2BaseSemaphoreTests.test_multirelease.<locals>.funcD  s-    KKMOOI&KKMOOI&r   c                     t        j                  t         j                        D ]  }t              t              z   | k\  s y  y r   r  r   s     r   r"  z8BaseSemaphoreTests.test_multirelease.<locals>.wait_countK  r#  r   r$  rl   r   F)r  rZ   r   rM   r`   r%  rm   )r   r&  r   r"  r   r   r'  r   r   r   r  s          @@@@r   test_multireleasez$BaseSemaphoreTests.test_multirelease<  sV   	ll9%		'	
 4_]FvX01#,? IFKKv'VHx$78S6\QC&L8: I]FKKv/0VHx$78S6\QC&L8A3<GI S[[/0 KKM3 __s   C6EEc                 F   | j                  d      }| j                  |j                  d             | j                  |j                  d             | j                  |j                  d             |j	                          | j                  |j                  d             y )Nr   F)r  rd   rZ   rm   r`   r  s     r   re   z#BaseSemaphoreTests.test_try_acquirek  sn    ll1oE*+E*+U+,E*+r   c                     | j                  d      j                          g fd}t        |d      5  	 d d d        | j                  t	              dgdz  dgdz  z          y # 1 sw Y   0xY w)Nr  c                       j                  j                  d              j                  j                  d             y rc   rh   )r   r  s   r   rk   z8BaseSemaphoreTests.test_try_acquire_contended.<locals>.fw  s-    NN3;;u-.NN3;;u-.r   ru   Fr  Tr   )r  rZ   r   rM   r%  )r   rk   r   r  s     @@r   ro   z-BaseSemaphoreTests.test_try_acquire_contendeds  se    ll1o	/ 1a[ 
 	5'A+!*CE [s   A))A2c                 P   | j                  d      }| j                  t        |j                  dd       | j	                  |j                  d             | j	                  |j                  d             | j                  |j                  d             |j                          | j	                  |j                  d             t        j                         }| j                  |j                  d             t        j                         |z
  }| j                  |d       y )Nr   Fg      ?r   g{Gzt?r   )
r  r~   r   rZ   rd   rm   r`   r	   r   rI   )r   r  tr   s       r   test_acquire_timeoutz'BaseSemaphoreTests.test_acquire_timeout  s    ll1o*ckk5#FE23E23U34E23NNS12^^!2s#r   c                     | j                         j                          fd}t        |d      5 }t        d       | j	                  |j
                         j                          d d d        y # 1 sw Y   y xY w)Nc                  F     j                           j                          y r   rr   )r  s   r   rk   z0BaseSemaphoreTests.test_default_value.<locals>.f  s    KKMKKMr   rl   )r  rZ   r   r   rm   r   r`   )r   rk   rw   r  s      @r   test_default_valuez%BaseSemaphoreTests.test_default_value  sX    lln	 1a[E #U^^, KKM [[s   7A33A<c                 <     j                  d      d fd	} |         j                  j                  d             j                           j	                  t
        |t
                j                  j                  d             j                          y )Nr   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rc   )rd   rZ   r`   rm   )r|   r   r  s    r   _withz+BaseSemaphoreTests.test_with.<locals>._with  sg    E 23$$S[[%78!	    S s"   3A:%A.A:.A7	3A::BFr   )r  rd   rZ   r`   r~   r   )r   r8  r  s   ` @r   r   zBaseSemaphoreTests.test_with  sj    ll1o	" 	E*+)UI6E*+r   N)r7   r8   r9   rT   r   r]   rx   r,  re   ro   r2  r5  r   r(   r   r   r  r    s>    J
6Gp-^,F$ r   r  c                       e Zd Z	 d Zd Zy)SemaphoreTestsc                     | j                  d      }|j                          |j                          |j                          |j                          y Nrl   )r  r`   rZ   r  s     r   r   z&SemaphoreTests.test_release_unacquired  s3    ll1or   c                 (   | j                  d      }| j                  t        |      d       |j                          | j                  t        |      d       |j	                          |j	                          | j                  t        |      d       y )Nr   z<\w+\.Semaphore at .*: value=3>z<\w+\.Semaphore at .*: value=2>z<\w+\.Semaphore at .*: value=4>)r  rV   rW   rZ   r`   r  s     r   rX   zSemaphoreTests.test_repr  si    ll1oc$FGc$FGc$FGr   Nr7   r8   r9   r   rX   r(   r   r   r:  r:    s    Hr   r:  c                       e Zd Z	 d Zd Zy)BoundedSemaphoreTestsc                     | j                         }| j                  t        |j                         |j	                          |j                          | j                  t        |j                         y r   )r  r~   r   r`   rZ   r  s     r   r   z-BoundedSemaphoreTests.test_release_unacquired  sG    lln*ckk2*ckk2r   c                     | j                  d      }| j                  t        |      d       |j                          | j                  t        |      d       y )Nr   z(<\w+\.BoundedSemaphore at .*: value=3/3>z(<\w+\.BoundedSemaphore at .*: value=2/3>)r  rV   rW   rZ   r  s     r   rX   zBoundedSemaphoreTests.test_repr  sB    ll1oc$OPc$OPr   Nr>  r(   r   r   r@  r@    s    3Qr   r@  c                   x    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 Zy)BarrierTestsru   g       @c                 \    | j                  | j                  | j                        | _        y )Nr   )barriertyperv   defaultTimeoutbarrierr5   s    r   r?   zBarrierTests.setUp  s#    ''8K8K'Lr   c                 8    | j                   j                          y r   )rH  abortr5   s    r   rC   zBarrierTests.tearDown  s    r   c                 \    t        || j                        5  	 d d d        y # 1 sw Y   y xY wr   )r   rv   r   rk   s     r   run_threadszBarrierTests.run_threads  s    1dff s   "+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   Trl   )rH  partiesrM   rv   r+   r   r,   r   	n_waitingrm   broken)r   r   nmr  s        r   	multipasszBarrierTests.multipass  s    LL  DFF#qAAJd#S_a!e4LLAJd#S_q1uk:LL  	//3,,-r   c                     | j                  t        | j                  d       | j                  t        | j                  d       y )Nr   )rO  r  )r~   r   rF  r5   s    r   rT   zBarrierTests.test_constructor  s8    *d&6&6B*d&6&6Cr   c                 D     	 g g g fd} j                  |       y )Nc                  *    j                          y r   )rT  )passesr   r   s   r   rk   z$BarrierTests.test_barrier.<locals>.f  s    NN7F+r   rM  )r   rX  rk   r   s   `` @r   test_barrierzBarrierTests.test_barrier  s&    	 b'	,r   c                 &    	 | j                  d      S )Nr$  )rZ  r5   s    r   test_barrier_10zBarrierTests.test_barrier_10  s    	   $$r   c                      	 g  fd} j                  |        j                  t              t        t         j                                     y )Nc                  \    j                   j                         } j                  |        y r   )rH  r   r   )r   r   r   s    r   rk   z(BarrierTests.test_wait_return.<locals>.f  s!    !!#ANN1r   )rM  rM   sumr+   rv   )r   rk   r   s   ` @r   test_wait_returnzBarrierTests.test_wait_return  sE    	 	 	Ws5='9:r   c                      	 g fd} j                   j                  |       fd} j                  |       y )Nc                  (     j                  d       y r4   )r   )r   s   r   actionz(BarrierTests.test_action.<locals>.action  s    NN4 r   c                  \     j                          j                  t              d       y r<  )r   rM   r,   )rH  r   r   s   r   rk   z#BarrierTests.test_action.<locals>.f  s     LLNS\1-r   )rF  rv   rM  )r   rc  rk   rH  r   s   `  @@r   test_actionzBarrierTests.test_action  s?    	 	!""46662	. 	r   c                     	 g g  fd} j                  |        j                  t              d        j                  t               j                  dz
          j	                   j
                  j                         y )Nc                  ^   	 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Nr   T)rH  r   rv   r   r   r   BrokenBarrierErrorrJ  )r  r   r   r   s    r   rk   z"BarrierTests.test_abort.<locals>.f+  s    
LL%%'	>&&!!#%// &% ""$s   AA! !$B,"B,+B,r   rl   )rM  rM   r,   rv   rd   rH  rQ  )r   rk   r   r   s   ` @@r   
test_abortzBarrierTests.test_abort%  so    	 	 	X*Xq1++,r   c                     	 g g g  fd} j                  |        j                  t              d        j                  t               j                  dz
          j                  t               j                         y )Nc                  6   j                   j                         } | j                  dz  k(  rkt        j                  t        j
                        D ]*  }j                   j                  j                  dz
  k\  s* n j                   j                          n,	 j                   j                          j                  d       j                   j                          j                  d       y # t        j                  $ r j                  d       Y Rw xY w)Nr   rl   T)rH  r   rv   r   r!   r"   rP  resetr   r   ri  )r  r%   r   r   results3r   s     r   rk   z"BarrierTests.test_reset.<locals>.fD  s    !!#ADFFAI~ //0E0EFA||--$&&1*= G ""$*LL%%'OOD) LLOOD!	 !33 *OOD)*s   +C1 1$DDr   rl   )rM  rM   r,   rv   )r   rk   r   r   rn  s   ` @@@r   
test_resetzBarrierTests.test_reset=  sv    	 	"$ 	X*Xq1X/r   c                 V    	 g g g  j                   j                         fd} j                  |        j                  t	              d        j                  t	               j                  dz
          j                  t	               j                         y )Nc                  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rh  )	rH  r   rv   r   r   r   ri  rJ  rm  )r  barrier2r   r   rn  r   s    r   rk   z,BarrierTests.test_abort_and_reset.<locals>.fd  s    
LL%%'	>&&!!#% }}$&&!)+""$MMOLLOOD! // &% ""$s   AC $D!<"D! D!r   rl   )rF  rv   rM  rM   r,   )r   rk   rr  r   r   rn  s   ` @@@@r   test_abort_and_resetz!BarrierTests.test_abort_and_reset\  s    	 ##DFF+	" 	"* 	X*Xq1X/r   c                 4     	  fd} j                  |       y )Nc                  &   j                   j                         } | j                  dz  k(  r"t        j                  j
                  dz         j                  t        j                  j                   j                  j
                  dz         y )Nr   r  )	rH  r   rv   r	   r
   rG  r~   r   ri  )r  r   s    r   rk   z$BarrierTests.test_timeout.<locals>.f  sm    !!#ADFFaK

4..23i::"ll//1D1Dq1HJr   rY  rL  s   ` r   r   zBarrierTests.test_timeout~  s    		J 	r   c                      	 d} j                  d|       fd}t        j                         }t        |d      5  	 d d d        t        j                         |z
  } j	                  ||       y # 1 sw Y   3xY w)Nr  r   r   c                  Z    j                  t        j                   j                         y r   )r~   r   ri  r   )rH  r   s   r   rk   z,BarrierTests.test_default_timeout.<locals>.f  s     i::%ll,r   rl   )rF  r	   r   r   rE   )r   r   rk   
start_timer   rH  s   `    @r   test_default_timeoutz!BarrierTests.test_default_timeout  sq    	 ""1g"6	, ^^%
1a[ ^^
*G, [s   A33A<c                 f    | j                  d      }|j                          |j                          y r<  )rF  r   )r   bs     r   test_single_threadzBarrierTests.test_single_thread  s$    Q		r   c                 (   | j                  d      t        j                  | j                  t	              d       fd}d}t        ||      5  t        j                  t        j                        D ]  }j                  |k\  s n | j                  t	              d       j                         d d d        | j                  t	              d       j                          | j                  t	              d       y # 1 sw Y   PxY w)Nr   z!<\w+\.Barrier at .*: waiters=0/3>c                  (     j                         y r   )r   )rH  r   s   r   rk   z!BarrierTests.test_repr.<locals>.f  s    LL!r   r   z!<\w+\.Barrier at .*: waiters=2/3>z<\w+\.Barrier at .*: broken>)rF  r   r   rV   rW   r   r!   r"   rP  r   rJ  )r   rk   rv   r%   rH  r   s       @@r   rX   zBarrierTests.test_repr  s    ""1%&&g(LM	" 1a[++G,A,AB$$) C T']AC LL!  	g=	? 	g8	:! [s   6D
/DDN)rl   )r7   r8   r9   rv   rG  r?   rC   rM  rT  rT   rZ  r\  r`  re  rj  ro  rs  r   ry  r|  rX   r(   r   r   rD  rD    sf     	
ANM.D%
;-00> 0D- 
:r   rD  )r   r  r	   _threadr   r   r   unittestr   testr   test.supportr   
skipUnlesshas_fork_supportr   r   objectr   TestCaser;   rK   r   r   r   r   r  r:  r@  rD  r(   r   r   <module>r     s    
 
  1     ) $##G$<$<%CD
 @F @F18$$ 1"V!L V!r? ?Dd+ d+Nm@ m@`G*\ G*TA AFH' H.Q. Q(`:< `:r   