
    4\h                        	 d dl Z d dlZd dlZd dlZd dlmZmZ d dlZd dlZd dl	Z	d dl
mZ d dlmZ  e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dS )    N)start_new_threadTIMEOUT_MAX)support)threading_helperz9platform doesn't support fork (no _at_fork_reinit method)c                 4    t          j        d| z             d S )N{Gz?)timesleep)nthreads    9/opt/python-3.11.14/usr/lib/python3.11/test/lock_tests.pywait_threads_blockedr      s     	Juw    c                   0    e Zd Z	 ddZd Zd Zd Zd ZdS )	BunchFc                 l    	 || _         || _        g | _        g | _        g | _        | | _        d | _        d S N)funcr   startedfinished
exceptions	_can_exit_wait_thread)selfr   r   wait_before_exits       r   __init__zBunch.__init__!   sD    	
 	-- r   c                 
   t          j                    }| j                            |           	 |                                  n1# t
          $ r$}| j                            |           Y d }~nd }~ww xY w| j                            |           t          j	        t          j
                  D ]}| j        r d S d S # | j                            |           t          j	        t          j
                  D ]}| j        r 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   	IIKKKK 	( 	( 	(O""3''''''''	( M  %%%+G,ABB  > EE  M  %%%+G,ABB  > Es0   A B< 
A2A-(B< -A22B< <ADc                 t   t          j        t          j                  | _        | j                                         	 t          | j                  D ]}t          | j	        d           n#  d| _
         xY wt          j        t          j                  D ]!}t          | j                  | j        k    r n"| S )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UU##%%%	4<(( 0 0 B////0	!DN'(=>> 	 	A4<  DL00 1 s   ,A+ +
A5c                    t          j        t           j                  D ]!}t          | j                  | j        k    r n"| j                            d d d            | j        }d | _        |rt          | j
         d|          d S )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__M   s    '(=>> 	 	A4=!!T\11 2 	""4t444 _
 	- DI!I!I!I!+- - -	- 	-r   c                     d| _         d S 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      si        ! ! ! !    "- - -    r   r   c                        e Zd Zd Zd Zd ZdS )BaseTestCasec                 6    t          j                    | _        d S r   )r   threading_setup_threadsr5   s    r   setUpzBaseTestCase.setUpa   s    (8::r   c                 R    t          j        | j          t          j                     d S r   )r   threading_cleanupr>   r   reap_childrenr5   s    r   tearDownzBaseTestCase.tearDownd   s'    *DM::r   c                 j    |                      ||dz             |                     ||dz             d S )Ng333333?g      $@)assertGreaterEqual
assertLess)r   actualexpecteds      r   assertTimeoutzBaseTestCase.assertTimeouth   s<     	3777400000r   N)r7   r8   r9   r?   rC   rI   r(   r   r   r;   r;   `   sA        ; ; ;     1 1 1 1 1r   r;   c                   d    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dS )BaseLockTestsc                     t          j        t           j                  D ]}t          |          |k    r n|                     t          |          |           d S r   )r   r!   r"   r,   assertEqual)r   phaserH   r%   s       r   
wait_phasezBaseLockTests.wait_phasev   s\    '(=>> 	 	A5zzX%% &UX.....r   c                 0    |                                  }~d S r   )locktyper   locks     r   test_constructorzBaseLockTests.test_constructor|   s    }}DDr   c                 v    |                                  }|                     t          |          d           ~d S )Nz<unlocked .* object (.*)?at .*>)rQ   assertRegexreprrR   s     r   	test_reprzBaseLockTests.test_repr   s3    }}d%FGGGDDr   c                     |                                  }|                                 |                     t          |          d           ~d S )Nz<locked .* object (.*)?at .*>)rQ   acquirerV   rW   rR   s     r   test_locked_reprzBaseLockTests.test_locked_repr   s@    }}d%DEEEDDr   c                 X    |                                  }|                                 ~d S r   )rQ   rZ   rR   s     r   test_acquire_destroyz"BaseLockTests.test_acquire_destroy   s#    }}DDr   c                     |                                  }|                                 |                                 ~d S r   rQ   rZ   releaserR   s     r   test_acquire_releasez"BaseLockTests.test_acquire_release   s0    }}DDr   c                     |                                  }|                     |                    d                     |                                 d S NF)rQ   
assertTruerZ   r`   rR   s     r   test_try_acquirezBaseLockTests.test_try_acquire   s>    }}U++,,,r   c                    |                                                                   g fd}t          |d          5  	 d d d            n# 1 swxY w Y   |                     d                                                     d S )Nc                  X                                              d                     d S 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   s    }}	/ 	/ 	/ 	/ 	/ 	/1a[[ 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	###s   AAAc                    |                                                                   fd}d}t          ||          5 }t          |           |                     t          |j                  d                                            d d d            n# 1 swxY w Y   |                     t          |j                  |           d S )Nc                  X                                                                         d S r   rZ   r`   rS   s   r   rk   z/BaseLockTests.test_acquire_contended.<locals>.f   !    LLNNNLLNNNNNr      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0!444 LLNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	U^,,a00000s   ABB Bc                    |                                  fd}dfd	}5  	 d d d            n# 1 swxY w Y   t          |d          5  	 d d d            n# 1 swxY w Y   |                     t                    5  5  t          # 1 swxY w Y   	 d d d            n# 1 swxY w Y   t          |d          5  	 d d d            d S # 1 swxY w Y   d S )Nc                  X                                                                         d S r   rr   rs   s   r   rk   z"BaseLockTests.test_with.<locals>.f   rt   r   c                 H    5  | | 	 d d d            d S # 1 swxY w Y   d S 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   s3   }}	 	 	 	 		 	 	 	 	 	  	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 1a[[ 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 y)) 	  	                      	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  1a[[ 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s`   155AA!A?B"B

B	B"B	B""B&)B&=CCCc                     |                                  fd}t          |d          5  	 d d d            d S # 1 swxY w Y   d S )Nc                  X                                                                         d S 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   :>>c                 P   |                                  |                     t          j        dd           |                     t          j        d           |                     t          j        d           |                     t          j        t
          dz                                  t
                                                      t          j                    }| 	                                        d                     t          j                    }| 
                    ||z
  d           g fd}t          |d          5  	 d d d            n# 1 swxY w Y   |                     d                    |                     d         d	           d S )
NFrl   itimeoutg}Ô%ITru   c                      t          j                    }                                         d                     t          j                    }                    || z
             d S )N      ?r   )r	   	monotonicr   rZ   )t1t2rS   resultss     r   rk   z%BaseLockTests.test_timeout.<locals>.f   sY    !!BNN4<<<4455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   }}*dlE1===*dlDAAA-uEEE-{QOOO[)))^Q//000^R###	$ 	$ 	$ 	$ 	$ 	$
 1a[[ 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	$$$71:s+++++s   E$$E(+E(c                     |                                  }t          j        |          }|                      |                       d S r   )rQ   weakrefrefassertIsNotNoner   rS   r   s      r   test_weakref_existsz!BaseLockTests.test_weakref_exists   s>    }}k$SSUU#####r   c                     |                                  }t          j        |          }~t          j                     |                      |                       d S r   )rQ   r   r   gccollectassertIsNoner   s      r   test_weakref_deletedz"BaseLockTests.test_weakref_deleted  sL    }}k$

##%%     r   N)r7   r8   r9   rO   rT   rX   r[   r]   ra   re   ro   rx   r   r   r   r   r   r(   r   r   rK   rK   q   s        / / /    
    
    
	 	 	1 1 1$  :  , , ,6$ $ $
! ! ! ! !r   rK   c                   8    e Zd Z	 d Zd Zd Zed             ZdS )	LockTestsc                 :   |                                  g fd}t          j                    5  t          |d           |                     d                                            |                     d           d d d            d S # 1 swxY w Y   d S )Nc                                                                             d                                                                   d            d S r   rZ   r   )rS   rN   s   r   rk   z#LockTests.test_reacquire.<locals>.f  sG    LLNNNLLLLNNNLLr   r(   rl      )rQ   r   r)   r   rO   r`   r   rk   rS   rN   s     @@r   test_reacquirezLockTests.test_reacquire  s    }}	 	 	 	 	 	 /11 	& 	&Q###OOE1%%% LLNNNOOE1%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   ABBBc                    |                                                                   fd}t          |d          5  	 d d d            n# 1 swxY w Y                                                                     d S )Nc                  0                                       d S r   )r`   rs   s   r   rk   z*LockTests.test_different_thread.<locals>.f'      LLNNNNNr   rl   )rQ   rZ   r   r`   r   s     @r   test_different_threadzLockTests.test_different_thread#  s    }}	 	 	 	 	1a[[ 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                 p   |                                  }|                                 |                     |                    d                     |                                 |                     |                                           |                     |                    d                     d S )Nr   r   F)blocking)rQ   rZ   rm   r`   lockedrd   rR   s     r   test_state_after_timeoutz"LockTests.test_state_after_timeout.  s     }}d33444'''e4455555r   c                     d }|                                  }|                                  ||           |                                  }|                                 |                                  ||           d S )Nc                 V    |                                   |                                  d S r   rr   rs   s    r   use_lockz/LockTests.test_at_fork_reinit.<locals>.use_lock:  s"     LLNNNLLNNNNNr   )rQ   _at_fork_reinitrZ   )r   r   rS   lock2s       r   test_at_fork_reinitzLockTests.test_at_fork_reinit8  s~    	 	 	 }} r   N)r7   r8   r9   r   r   r   requires_forkr   r(   r   r   r   r   
  sa        & & &(	 	 	6 6 6   ]  r   r   c                   4    e Zd Z	 d Zd Zd Zd Zd Zd ZdS )
RLockTestsc                    |                                  }|                                 |                                 |                                 |                                 |                                 |                                 d S r   r_   rR   s     r   r   zRLockTests.test_reacquireP  sa    }}r   c                    |                                  }|                     t          |j                   |                                 |                                 |                                 |                                 |                                 |                                 |                     t          |j                   d S r   )rQ   r~   RuntimeErrorr`   rZ   rR   s     r   test_release_unacquiredz"RLockTests.test_release_unacquiredY  s    }},555,55555r   c                    |                                  }|                     t          |j                   |                                 |                                 |                                 |                                 |                                 |                                 |                     t          |j                   d S r   )rQ   r~   r   _release_saverZ   r`   rR   s     r   test_release_save_unacquiredz'RLockTests.test_release_save_unacquirede  s    }},(:;;;,(:;;;;;r   c                 `                                                           d                                                                                                 d                                                                                                                                  d                                                                                                 d                                                                                                                                  d                                           g  fd}t          j                    5  t          |d                                d                                d                                           	                    d                                 d                                d                                           d d d            d S # 1 swxY w Y   d S )Nr   rl      r   c                                                                             d                                d                                                                 d            d S )Nr   )rZ   r   rO   r`   )rS   rN   r   s   r   rk   z*RLockTests.test_recursion_count.<locals>.f  s[    LLNNNLLOOE1%%%LLNNNLLr   r(   )
rQ   rM   _recursion_countrZ   r`   r   r)   r   rO   r   r   s   ` @@r   test_recursion_countzRLockTests.test_recursion_countq  s7   }}D1133444D1133444D1133444D1133444D1133444	 	 	 	 	 	 	 /11 		9 		9Q###OOE1%%%Q 5 5 7 7888 LLOOE1%%%Q 5 5 7 7888		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9 		9s   4B"H##H'*H'c                 .   |                                  fd}t          |dd          5 }	 |                     t          j                   |                                 n# |                                 w xY w	 d d d            d S # 1 swxY w Y   d S )Nc                  0                                       d S 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  s    }}	 	 	 	 	 1a 	"%"!!,===!!!!!!!!!		" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s(   B
 A#B
#A99B

BBc                    |                                  |                                                                                                 |                                                                                                 |                                                                g fd}t          |d          5  	 d d d            n# 1 swxY w Y   |                     d                                                     |                                                                                                 |                                                                d S )Nc                  V                                                                     d S 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   CC!CN)	r7   r8   r9   r   r   r   r   r   r   r(   r   r   r   r   L  st          
6 
6 
6
< 
< 
<!9 !9 !9F
" 
" 
"+ + + + +r   r   c                   J    e Zd Z	 d Zd Zd Zd Zd Zed             Z	d Z
dS )	
EventTestsc                 T   |                                  }|                     |                                           |                                 |                     |                                           |                                 |                     |                                           |                                 |                     |                                           |                                 |                     |                                           d S r   )	eventtyperm   is_setsetrd   clearr   evts     r   test_is_setzEventTests.test_is_set  s    nn&&&			

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

%%%		&&&		&&&&&r   c                 j   d}g g fd}t          ||          5  t          |           |                     t                    d                                            d d d            n# 1 swxY w Y   |                     dg|z             |                     dg|z             d S )Nru   c                                                                                                                                                        d S r   )r   wait)r   results1results2s   r   rk   z#EventTests._check_notify.<locals>.f  s=    OOCHHJJ'''OOCHHJJ'''''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... GGIII	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	D6A:...D6A:.....s   AA44A8;A8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          ||          5  	 d d d            n# 1 swxY w Y   |                     dg|z             D ]0\  }}|                     |           |                     |d           1g g                                  t          ||          5  	 d d d            n# 1 swxY w Y   |                     dg|z             D ]\  }}|                     |           d S )Nru   c                                                              d                     t          j                    }                     d          }t          j                    }                     ||| z
  f           d S )Ng        r   )r   r   r	   r   )r   rr   r   r   r   s      r   rk   z"EventTests.test_timeout.<locals>.f  sh    OOCHHSMM***!!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#   AA
ACCCc                 8   |                                  g fd}d}t          ||          5  t          |                                                                             d d d            n# 1 swxY w Y   |                     dg|z             d S )Nc                  l                                              t          j                             d S 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  s       	= 	= 	= 	= 	= 	= 1a[[ 	 	 ### IIKKKKKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	4&1*-----s   8A55A9<A9c                    |                                  }|j        5  |                     |j                            d                     d d d            n# 1 swxY w Y   |                                 |j        5  |                     |j                            d                     d d d            d S # 1 swxY w Y   d S rc   )r   _condrm   rZ   r   r   s     r   r   zEventTests.test_at_fork_reinit  s6    nnY 	7 	7SY..u55666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7Y 	7 	7SY..u55666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s#   .AAA<.B77B;>B;c                     |                                  }|                     t          |          d           |                                 |                     t          |          d           d S )Nz<\w+\.Event at .*: unset>z<\w+\.Event at .*: set>)r   rV   rW   r   r   s     r   rX   zEventTests.test_repr  s^    nnc$@AAA			c$>?????r   N)r7   r8   r9   r   r   r   r   r   r   r   rX   r(   r   r   r   r     s        
' 
' 
'/ / /(       >. . .& 7 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
d	S )
ConditionTestsc                    |                                  }|                                 |                                 |                                 |                                 t          j                    }|                      |          }|                                 |                     |                    d                     |                                 |                     |                    d                     |                     |                    d                     |                                 |5  |                     |                    d                     d d d            d S # 1 swxY w Y   d S rc   )condtyperZ   r`   r   Lockrm   rd   )r   condrS   s      r   test_acquirezConditionTests.test_acquire(  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   r~   r   r   r   r   s     r   test_unacquired_waitz#ConditionTests.test_unacquired_wait;  s-    }},	22222r   c                 n    |                                  }|                     t          |j                   d S r   )r   r~   r   notifyr   s     r   test_unacquired_notifyz%ConditionTests.test_unacquired_notify?  s-    }},44444r   c                   	
 g g 	g 
d	
fd}d}t          ||          5  t          j        t          j                  D ]}t	                    |k    r n                                 |                     	g            d}                                                     |           t          |           d
                                 t          j        t          j                  D ]}t	          	          |k    r n|                     	dg|z             |                     
g            t          j        t          j                  D ]}t	                    |k    r n                                                     d           t          |           d
                                 t          j        t          j                  D ]*}t	          	          t	          
          z   ||z   k    r n+||z
  }|                     	dg|z  dg|z  z              |                     
dg|z             t          j        t          j                  D ]}t	                    |k    r n                                                                  t          |           d
                                 t          j        t          j                  D ]}t	          
          |k    r n|                     	dg|z  dg|z  z              |                     
dg|z  d	g|z  z              d d d            d S # 1 swxY w Y   d S )
Nr   c                                                                                                                      }                                                      | f                                                                                                            }                                                      | f           d S r   )rZ   r   r   r`   )rj   r   	phase_numreadyr   r   s    r   rk   z'ConditionTests._check_notify.<locals>.fS  s    LLNNNLL###YY[[FLLNNNOOVY/000LLNNNLL###YY[[FLLNNNOOVY/0000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_notifyC  s    		1 	1 	1 	1 	1 	1 	1 	1 	1 1a[[ @	T @	T +G,ABB  u::??E # KKMMMXr*** FLLNNNKK ((( ILLNNN+G,ABB  x==F**E + X	{V';<<<Xr*** +G,ABB  u::''E ( LLNNNKKNNN ### ILLNNN+G,ABB  x==3x==0QZ@@E A ZFX	{V';ykF>R'RSSSX	{V';<<< +G,ABB  u::??E # LLNNNOO ### ILLNNN+G,ABB  x==A%%E &X	{V';ykF>R'RSSSX	{V';ykF>R'RSSSA@	T @	T @	T @	T @	T @	T @	T @	T @	T @	T @	T @	T @	T @	T @	T @	T @	T @	Ts   LMMMc                     |                                  }|                     |           |                     |           d S r   )r   r   r   s     r   r   zConditionTests.test_notify  s=    }}4   4     r   c                 L   |                                  dg fd}d}t          ||          5  	 d d d            n# 1 swxY w Y   |                     t                    |           D ]0\  }}|                     |           |                     |           1d S )Nr   c                                                       t          j                    }                               }t          j                    }                                                     || z
  |f           d S r   )rZ   r	   r   r   r`   r   )r   rj   r   r   r   r   s      r   rk   z&ConditionTests.test_timeout.<locals>.f  si    LLNNN!!BYYw''F!!BLLNNN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   AA
Ac                 L                                      d fd}t          |d          5  t          d          D ]I}t          j        d           5  dz                                   d d d            n# 1 swxY w Y   J	 d d d            d S # 1 swxY w Y   d S )Nr   c                      5                       fd          }                     |                                d           d d d            d S # 1 swxY w Y   d S )Nc                       dk    S N   r(   states   r   <lambda>z8ConditionTests.test_waitfor.<locals>.f.<locals>.<lambda>  s    uz r   r  )wait_forrd   rM   )rj   r   r   r  s    r   rk   z&ConditionTests.test_waitfor.<locals>.f  s     + +'9'9'9'9::'''  ***+ + + + + + + + + + + + + + + + + +s   AAAArl   r  r   )r   r   r+   r	   r
   r   )r   rk   ir   r  s   `  @@r   test_waitforzConditionTests.test_waitfor  sJ   }}	+ 	+ 	+ 	+ 	+ 	+ 	+ 1a[[ 	" 	"1XX " "
5!!! " "QJEKKMMM" " " " " " " " " " " " " " ""	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s5   (BA?3B?BBBBB Bc                                                       dg  fd}t          |d          5  t          d          D ]I}t          j        d           5  dz                                   d d d            n# 1 swxY w Y   J	 d d d            n# 1 swxY w Y                        t                    d           d S )Nr   c                  D   5  t          j                    }                     fdd          }t          j                    | z
  }                     |                               | d                               d            d d d            d S # 1 swxY w Y   d S )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  s     % %^%%'8'8'8'8#FF^%%*  (((""2s+++t$$$% % % % % % % % % % % % % % % % % %s   BBB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  sj   }}	% 	% 	% 	% 	% 	% 	% 	% 1a[[ 	" 	"1XX " "
5!!! " "QJEKKMMM" " " " " " " " " " " " " " ""	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	Wq)))))s5   (BB7BBB
BBB #B N)r7   r8   r9   r   r   r   r   r   r   r  r  r(   r   r   r   r   #  s        2 2 2&3 3 35 5 5`T `T `TD! ! !% % %4" " " * * * * *r   r   c                   L    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 )BaseSemaphoreTestsc                     |                      t          | j        d           |                      t          | j        t          j                    d S )N)value)r~   r   semtypesysmaxsizer5   s    r   rT   z#BaseSemaphoreTests.test_constructor  sF    *dlB???*dlS[LIIIIIr   c                 J   |                      d          }|                                 |                                 |                      d          }|                                 |                                 |                                 |                                 d S )Nrl   r   )r  rZ   r`   r   sems     r   r   zBaseSemaphoreTests.test_acquire  sr    ll1ooll1oor   c                 X    |                                  }|                                 ~d S r   )r  rZ   r  s     r   r]   z'BaseSemaphoreTests.test_acquire_destroy   s#    llnnCCr   c                   
 d}|                      |                                           g g g d

fd}fd}d}t          ||          5  |dz
  } ||           |                     z   dg|z             d
t	          |          D ]}                                 |} |||z              |                     t          z             dg|z  dg|z  z              d
|dz
  }t	          |          D ]}                                  |||z   |z              |                     t          z             dg|z  dg|z  z   dg|z  z              |                                         d                     d}	                                 d d d            n# 1 swxY w Y   |                     d	g||z   |z   |	z   z             d S )
N   r   c                                                                                                                                                                                                                        d S r   rh   )r   r   r   r  sem_resultss   r   r   z7BaseSemaphoreTests.test_acquire_contended.<locals>.func  se    s{{}}---OOI&&&s{{}}---OOI&&&&&r   c                     t          j        t           j                  D ](}t                    t                    z   | k    r d S )d S r   r   r!   r"   r,   countr%   r   r   s     r   
wait_countz=BaseSemaphoreTests.test_acquire_contended.<locals>.wait_count  R    +G,ABB  x==3x==0E99EE : 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JvX01#,??? I9%%  FJv'''VHx$788S6\QC&L8: : : I!mF6]]  Jv/000VHx$788S6\QC&L8A3<GI I I S[[//000 FKKMMM9	 	 	 	 	 	 	 	 	 	 	 	 	 	 	< 	6F?V#;f#DE	G 	G 	G 	G 	Gs   EF11F58F5c                 *  	
 d}|                      |          

                                 g g 	d	
fd}	fd}t          |d          5  |dz
  } ||           |                     	z   dg|z             d|}
                    |            |||z              |                     t          	z             dg|z  dg|z  z              d|dz
  }
                    |            |||z   |z              |                     t          	z             dg|z  dg|z  z   dg|z  z              |                     
                    d                     
                                 d d d            d S # 1 swxY w Y   d S )	Nr  r   c                                                                                                                                                          d S r   r   )r   r   r   r  s   r   r   z2BaseSemaphoreTests.test_multirelease.<locals>.funcE  sG    KKMMMOOI&&&KKMMMOOI&&&&&r   c                     t          j        t           j                  D ](}t                    t                    z   | k    r d S )d S r   r  r   s     r   r"  z8BaseSemaphoreTests.test_multirelease.<locals>.wait_countL  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=  sN   	ll9%%		' 	' 	' 	' 	' 	' 	' 	'	 	 	 	 	 	
 4__ 	 	]FJvX01#,??? IFKKJv'''VHx$788S6\QC&L8: : : I]FKKJv/000VHx$788S6\QC&L8A3<GI I I S[[//000 KKMMM3	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   D'FFFc                    |                      d          }|                     |                    d                     |                     |                    d                     |                     |                    d                     |                                 |                     |                    d                     d S )Nr   F)r  rd   rZ   rm   r`   r  s     r   re   z#BaseSemaphoreTests.test_try_acquirel  s    ll1ooE**+++E**+++U++,,,E**+++++r   c                    |                      d                                           g fd}t          |d          5  	 d d d            n# 1 swxY w Y   |                     t	                    dgdz  dgdz  z              d S )Nr  c                                                                d                                                               d                     d S rc   rh   )r   r  s   r   rk   z8BaseSemaphoreTests.test_try_acquire_contended.<locals>.fx  sE    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_contendedt  s    ll1oo	/ 	/ 	/ 	/ 	/ 	/ 1a[[ 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 	5'A+!*CEEEEEs   AAAc                    |                      d          }|                     t          |j        dd           |                     |                    d                     |                     |                    d                     |                     |                    d                     |                                 |                     |                    d                     t          j                    }|                     |                    d                     t          j                    |z
  }| 	                    |d           d S )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   ll1oo*ck5#FFFE22333E22333U33444E22333NS11222^!2s#####r   c                 .   |                                                                   fd}t          |d          5 }t          d           |                     |j                                                    d d d            d S # 1 swxY w Y   d S )Nc                  X                                                                         d S r   rr   )r  s   r   rk   z0BaseSemaphoreTests.test_default_value.<locals>.f  s!    KKMMMKKMMMMMr   rl   )r  rZ   r   r   rm   r   r`   )r   rk   rw   r  s      @r   test_default_valuez%BaseSemaphoreTests.test_default_value  s    llnn	 	 	 	 	 1a[[ 	E ###U^,,, KKMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   >B

BBc                                           d          d fd	} |                                                      d                                                                           t
          |t
                                                              d                                                      d S )Nr   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 rc   )rd   rZ   r`   rm   )r|   r   r  s    r   _withz+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  rd   rZ   r`   r~   r   )r   r8  r  s   ` @r   r   zBaseSemaphoreTests.test_with  s    ll1oo	" 	" 	" 	" 	" 	" 	" 	E**+++)UI666E**+++r   N)r7   r8   r9   rT   r   r]   rx   r,  re   ro   r2  r5  r   r(   r   r   r  r    s        J J J    
6G 6G 6Gp- - -^, , ,F F F$ $ $       r   r  c                       e Zd Z	 d Zd ZdS )SemaphoreTestsc                     |                      d          }|                                 |                                 |                                 |                                 d S Nrl   )r  r`   rZ   r  s     r   r   z&SemaphoreTests.test_release_unacquired  sI    ll1oor   c                 z   |                      d          }|                     t          |          d           |                                 |                     t          |          d           |                                 |                                 |                     t          |          d           d S )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  s    ll1ooc$FGGGc$FGGGc$FGGGGGr   Nr7   r8   r9   r   rX   r(   r   r   r:  r:    s<          H H H H Hr   r:  c                       e Zd Z	 d Zd ZdS )BoundedSemaphoreTestsc                     |                                  }|                     t          |j                   |                                 |                                 |                     t          |j                   d S r   )r  r~   r   r`   rZ   r  s     r   r   z-BoundedSemaphoreTests.test_release_unacquired  s_    llnn*ck222*ck22222r   c                     |                      d          }|                     t          |          d           |                                 |                     t          |          d           d S )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  s^    ll1ooc$OPPPc$OPPPPPr   Nr>  r(   r   r   r@  r@    s<        3 3 3Q Q Q Q Qr   r@  c                   t    e 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dS )BarrierTestsru   g       @c                 R    |                      | j        | j                  | _        d S )Nr   )barriertyperv   defaultTimeoutbarrierr5   s    r   r?   zBarrierTests.setUp  s%    ''8K'LLr   c                 8    | j                                          d S r   )rH  abortr5   s    r   rC   zBarrierTests.tearDown  s    r   c                 d    t          || j                  5  	 d d d            d S # 1 swxY w Y   d S r   )r   rv   r   rk   s     r   run_threadszBarrierTests.run_threads  s{    1df 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   %))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   Trl   )rH  partiesrM   rv   r+   r   r,   r   	n_waitingrm   broken)r   r   nmr  s        r   	multipasszBarrierTests.multipass  s   L DF###q 	  	 AAJd###S__a!e444LAJd###S__q1uk:::L/333,-----r   rl   c                 N     	 g g g fd}                      |           d S )Nc                  4                                     d S r   )rT  )passesr   r   s   r   rk   z$BarrierTests.test_barrier.<locals>.f  s    NN7F+++++r   rM  )r   rW  rk   r   s   `` @r   test_barrierzBarrierTests.test_barrier  sR    	 b'	, 	, 	, 	, 	, 	, 	,r   c                 .    	 |                      d          S )Nr$  )rY  r5   s    r   test_barrier_10zBarrierTests.test_barrier_10  s    	   $$$r   c                      	 g  fd}                      |                                t                    t          t           j                                       d S )Nc                  d    j                                         }                     |            d S 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  sv    	 	 	 	 	 	 	 	Ws5=='9'9:::::r   c                      	 g fd}                       j        |           fd}                     |           d S )Nc                  2                          d           d S r4   )r   )r   s   r   actionz(BarrierTests.test_action.<locals>.action  s    NN4     r   c                  v                                                           t                    d           d S r<  )r   rM   r,   )rH  r   r   s   r   rk   z#BarrierTests.test_action.<locals>.f  s2    LLNNNS\\1-----r   )rF  rv   rM  )r   rb  rk   rH  r   s   `  @@r   test_actionzBarrierTests.test_action  s    	 	! 	! 	! 	! 	!""46622	. 	. 	. 	. 	. 	. 	. 	r   c                 (    	 g g  fd}                      |                                t                    d                                t                     j        dz
                                   j        j                   d S )Nc                  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Nr   T)rH  r   rv   r   r   r   BrokenBarrierErrorrJ  )r  r   r   r   s    r   rk   z"BarrierTests.test_abort.<locals>.f(  s    
L%%''	>>&&!!###%%%%%/ & & &%%%%%%   ""$$$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"  s    	 	 	 	 	 	 	 	 	X***Xq111+,,,,,r   c                 B    	 g g g  fd}                      |                                t                    d                                t                     j        dz
                                  t                     j                   d S )Nc                     j                                         } | j        dz  k    rUt          j        t          j                  D ]}j         j        j        dz
  k    r nj                                          nZ	 j                                                              d           n*# t          j
        $ r                     d           Y nw xY wj                                                              d           d S )Nr   rl   T)rH  r   rv   r   r!   r"   rP  resetr   r   rh  )r  r%   r   r   results3r   s     r   rk   z"BarrierTests.test_reset.<locals>.fA  s   !!##ADFAI~~ /0EFF  A|-$&1*== >""$$$$*L%%'''OOD)))) 3 * * *OOD)))))* LOOD!!!!!s   ?.B. .$CCr   rl   )rM  rM   r,   rv   )r   rk   r   r   rm  s   ` @@@r   
test_resetzBarrierTests.test_reset:  s    	 	" 	" 	" 	" 	" 	" 	" 	"$ 	X***Xq111X/////r   c                 z    	 g g g                        j                   fd}                     |                                t	                    d                                t	                     j        dz
                                  t	                     j                   d S )Nc                  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 rg  )	rH  r   rv   r   r   r   rh  rJ  rl  )r  barrier2r   r   rm  r   s    r   rk   z,BarrierTests.test_abort_and_reset.<locals>.fa  s"   
L%%''	>>&&!!###%%%%/ & & &%%%%%   ""$$$ }}$&!)++""$$$MMOOOLOOD!!!!!s   AA   $B+"B+*B+r   rl   )rF  rv   rM  rM   r,   )r   rk   rq  r   r   rm  s   ` @@@@r   test_abort_and_resetz!BarrierTests.test_abort_and_resetY  s    	 ##DF++	" 	" 	" 	" 	" 	" 	" 	" 	"* 	X***Xq111X/////r   c                 >     	  fd}                      |           d S )Nc                      j                                         } | j        dz  k    rt          j        j        dz                                 t          j        j         j        j        dz             d S )Nr   r  )	rH  r   rv   r	   r
   rG  r~   r   rh  )r  r   s    r   rk   z$BarrierTests.test_timeout.<locals>.f  s}    !!##ADFaK
4.2333i:"l/1Dq1HJ J J J Jr   rX  rL  s   ` r   r   zBarrierTests.test_timeout{  sB    		J 	J 	J 	J 	J 	r   c                     	 d}                      d|           fd}t          j                    }t          |d          5  	 d d d            n# 1 swxY w Y   t          j                    |z
  }                     ||           d S )Nr  r   r   c                  R                         t          j         j                   d S r   )r~   r   rh  r   )rH  r   s   r   rk   z,BarrierTests.test_default_timeout.<locals>.f  s/    i:%l, , , , ,r   rl   )rF  r	   r   r   rE   )r   r   rk   
start_timer   rH  s   `    @r   test_default_timeoutz!BarrierTests.test_default_timeout  s    	 ""1g"66	, 	, 	, 	, 	, 	, ^%%
1a[[ 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	^
*G,,,,,s   AAAc                     |                      d          }|                                 |                                 d S r<  )rF  r   )r   bs     r   test_single_threadzBarrierTests.test_single_thread  s3    Q		r   c                 r   |                      d          t          j        |                     t	                    d           fd}d}t          ||          5  t          j        t          j                  D ]}j        |k    r n|                     t	                    d           	                               d d d            n# 1 swxY w Y   |                     t	                    d           
                                 |                     t	                    d           d S )Nr   z!<\w+\.Barrier at .*: waiters=0/3>c                  2                                     d S 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MM	" 	" 	" 	" 	" 	" 1a[[ 		" 		"+G,ABB  $))E *T']]AC C C LL!!!		" 		" 		" 		" 		" 		" 		" 		" 		" 		" 		" 		" 		" 		" 		" 	g=	? 	? 	? 	g8	: 	: 	: 	: 	:s   A'CCCN)rl   )r7   r8   r9   rv   rG  r?   rC   rM  rT  rY  r[  r_  rd  ri  rn  rr  r   rx  r{  rX   r(   r   r   rD  rD    s        	
ANM M M    . . .   % % %
; 
; 
;  - - -00 0 0> 0  0  0D  - - -   
: : : : :r   rD  )osr   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 1 1 1 1 1 1 1             ) ) ) ) ) ) $#G$<%CD D
     @ @ @ @ @F @ @ @F1 1 1 1 18$ 1 1 1"V! V! V! V! V!L V! V! V!r? ? ? ? ? ? ? ?Dd+ d+ d+ d+ d+ d+ d+ d+Nm@ m@ m@ m@ m@ m@ m@ m@`G* G* G* G* G*\ G* G* G*TA A A A A A A AFH H H H H' H H H.Q Q Q Q Q. Q Q Q(\: \: \: \: \:< \: \: \: \: \:r   