
    ;e}                        	 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                  .    t          j        d           d S )N{Gz?)timesleep     &/usr/lib/python3.11/test/lock_tests.py_waitr      s    Jtr   c                   *    e Zd Z	 ddZd Zd Zd ZdS )BunchFc                 "    	  _         | _        g  _        g  _        |  _        t          j                     _         j                                          fd}	 t          |          D ]}t          |d           d S #  d _         xY w)Nc                  ^   t          j                    } j                            |            	               j                            |            j        st                       j        d S d S # j                            |            j        st                       j        w xY wN)	threading	get_identstartedappendfinished	_can_exitr   )tidfselfs    r   taskzBunch.__init__.<locals>.task-   s    %''CL$$$$$S))). GGG .      $$S))). GGG .     s   
A4 48B,r   T)r   nr   r   r   r   wait_threads_exitwait_thread	__enter__ranger   )r   r   r   wait_before_exitr   is   ``    r   __init__zBunch.__init__   s    	
 --+=??""$$$	 	 	 	 	 		1XX + + r****+ +	!DNs    "B 
Bc                     t          | j                  | j        k     r-t                       t          | j                  | j        k     +d S d S r   )lenr   r   r   r   s    r   wait_for_startedzBunch.wait_for_started>   sG    $,$&((GGG $,$&((((((r   c                     t          | j                  | j        k     r+t                       t          | j                  | j        k     +| j                            d d d            d S r   )r'   r   r   r   r    __exit__r(   s    r   wait_for_finishedzBunch.wait_for_finishedB   s^    $-  46))GGG $-  46)) 	!!$d33333r   c                     d| _         d S NT)r   r(   s    r   	do_finishzBunch.do_finishH   s    r   N)F)__name__
__module____qualname__r%   r)   r,   r/   r   r   r   r   r      sZ           >  4 4 4    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_threadsr(   s    r   setUpzBaseTestCase.setUpM   s    (8::r   c                 R    t          j        | j          t          j                     d S r   )r   threading_cleanupr7   r   reap_childrenr(   s    r   tearDownzBaseTestCase.tearDownP   s'    *DM::r   c                 j    |                      ||dz             |                     ||dz             d S )Ng333333?g      $@)assertGreaterEqual
assertLess)r   actualexpecteds      r   assertTimeoutzBaseTestCase.assertTimeoutT   s<     	3777400000r   N)r0   r1   r2   r8   r<   rB   r   r   r   r4   r4   L   sA        ; ; ;     1 1 1 1 1r   r4   c                   ^    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S )BaseLockTestsc                 0    |                                  }~d S r   )locktyper   locks     r   test_constructorzBaseLockTests.test_constructorb   s    }}DDr   c                 v    |                                  }|                     t          |          d           ~d S )Nz<unlocked .* object (.*)?at .*>)rF   assertRegexreprrG   s     r   	test_reprzBaseLockTests.test_reprf   s3    }}d%FGGGDDr   c                     |                                  }|                                 |                     t          |          d           ~d S )Nz<locked .* object (.*)?at .*>)rF   acquirerK   rL   rG   s     r   test_locked_reprzBaseLockTests.test_locked_reprk   s@    }}d%DEEEDDr   c                 X    |                                  }|                                 ~d S r   )rF   rO   rG   s     r   test_acquire_destroyz"BaseLockTests.test_acquire_destroyq   s#    }}DDr   c                     |                                  }|                                 |                                 ~d S r   rF   rO   releaserG   s     r   test_acquire_releasez"BaseLockTests.test_acquire_releasev   s0    }}DDr   c                     |                                  }|                     |                    d                     |                                 d S NF)rF   
assertTruerO   rU   rG   s     r   test_try_acquirezBaseLockTests.test_try_acquire|   s>    }}U++,,,r   c                    |                                                                   g fd}t          |d                                           |                     d                                                     d S )Nc                  X                                              d                     d S rX   r   rO   rH   results   r   r   z3BaseLockTests.test_try_acquire_contended.<locals>.f   s'    MM$,,u--.....r      r   )rF   rO   r   r,   assertFalserU   r   r   rH   r_   s     @@r   test_try_acquire_contendedz(BaseLockTests.test_try_acquire_contended   s    }}	/ 	/ 	/ 	/ 	/ 	/a%%'''###r   c                    |                                                                   d}fd}t          ||          }|                                 t	                       |                     t          |j                  d                                            |	                                 |                     t          |j                  |           d S )N   c                  X                                                                         d S r   rO   rU   rH   s   r   r   z/BaseLockTests.test_acquire_contended.<locals>.f   !    LLNNNLLNNNNNr   r   )
rF   rO   r   r)   r   assertEqualr'   r   rU   r,   )r   Nr   brH   s       @r   test_acquire_contendedz$BaseLockTests.test_acquire_contended   s    }}	 	 	 	 	 !QKK	QZ!,,,	QZ!,,,,,r   c                 $   |                                  fd}dfd	} |             t          |d                                           |                     t          |t                     t          |d                                           d S )Nc                  X                                                                         d S r   rg   rh   s   r   r   z"BaseLockTests.test_with.<locals>.f   ri   r   c                 H    5  | | 	 d d d            d S # 1 swxY w Y   d S r   r   )errrH   s    r   _withz&BaseLockTests.test_with.<locals>._with   s|      ?I #                 s   r`   r   )rF   r   r,   assertRaises	TypeError)r   r   rr   rH   s      @r   	test_withzBaseLockTests.test_with   s    }}	 	 	 	 		 	 	 	 	 	 	a%%''')UI666a%%'''''r   c                    |                                  fd}t          t          j                              }t	          |d                                           t          t          j                              |k    rJt          j        d           |                     |t          t          j                                         d S d S )Nc                  X                                                                         d S r   rg   rh   s   r   r   z)BaseLockTests.test_thread_leak.<locals>.f   ri   r      g?)	rF   r'   r   	enumerater   r,   r	   r
   rj   )r   r   r   rH   s      @r   test_thread_leakzBaseLockTests.test_thread_leak   s     }}	 	 	 	 	 	#%%&& 	a&&(((y"$$%%**
 JsOOOQI$7$9$9 : :;;;;; +*r   c                 B   |                                  |                     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                                           |                     d                    |                     d         d	           d S )
NFr`   itimeoutg}Ô%ITre   c                      t          j                    }                                         d                     t          j                    }                    || z
             d S )N      ?r|   )r	   	monotonicr   rO   )t1t2rH   resultss     r   r   z%BaseLockTests.test_timeout.<locals>.f   sY    !!BNN4<<<44555!!BNN27#####r   r   r   )rF   rs   
ValueErrorrO   OverflowErrorr   rU   r	   r   rY   r?   r   r,   ra   rB   )r   r   r   r   rH   r   s       @@r   test_timeoutzBaseLockTests.test_timeout   sr   }}*dlE1===*dlDAAA-uEEE-{QOOO[)))^Q//000^R###	$ 	$ 	$ 	$ 	$ 	$
 	a%%'''$$$71:s+++++r   c                     |                                  }t          j        |          }|                      |                       d S r   )rF   weakrefrefassertIsNotNoner   rH   r   s      r   test_weakref_existsz!BaseLockTests.test_weakref_exists   s>    }}k$SSUU#####r   c                     |                                  }t          j        |          }~t          j                     |                      |                       d S r   )rF   r   r   gccollectassertIsNoner   s      r   test_weakref_deletedz"BaseLockTests.test_weakref_deleted   sL    }}k$

##%%     r   N)r0   r1   r2   rI   rM   rP   rR   rV   rZ   rc   rm   ru   rz   r   r   r   r   r   r   rD   rD   ]   s            
    
    
  - - - ( ( ( < < <&, , ,4$ $ $
! ! ! ! !r   rD   c                   8    e Zd Z	 d Zd Zd Zed             ZdS )	LockTestsc                 Z   |                                  g fd}t          j                    5  t          |d           t	                    dk    r!t                       t	                    dk    !t                       |                     t	                    d                                            t	                    dk    r!t                       t	                    dk    !|                     t	                    d           d d d            d S # 1 swxY w Y   d S )Nc                                                                             d                                                                   d            d S r   rO   r   )rH   phases   r   r   z#LockTests.test_reacquire.<locals>.f   sG    LLNNNLLLLNNNLLr   r   r   r`      )rF   r   r   r   r'   r   rj   rU   )r   r   rH   r   s     @@r   test_reacquirezLockTests.test_reacquire   sY   }}	 	 	 	 	 	 /11 		, 		,Q###e**// e**//GGGSZZ+++LLNNNe**// e**//SZZ+++		, 		, 		, 		, 		, 		, 		, 		, 		, 		, 		, 		, 		, 		, 		, 		, 		, 		,s   C!D  D$'D$c                     |                                                                   fd}t          |d          }|                                                                                                   d S )Nc                  0                                       d S r   )rU   rh   s   r   r   z*LockTests.test_different_thread.<locals>.f      LLNNNNNr   r`   )rF   rO   r   r,   rU   r   r   rl   rH   s      @r   test_different_threadzLockTests.test_different_thread   ss    }}	 	 	 	 	!QKK	r   c                 p   |                                  }|                                 |                     |                    d                     |                                 |                     |                                           |                     |                    d                     d S )Nr   r|   F)blocking)rF   rO   ra   rU   lockedrY   rG   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   rg   rh   s    r   use_lockz/LockTests.test_at_fork_reinit.<locals>.use_lock  s"     LLNNNLLNNNNNr   )rF   _at_fork_reinitrO   )r   r   rH   lock2s       r   test_at_fork_reinitzLockTests.test_at_fork_reinit  s~    	 	 	 }} r   N)r0   r1   r2   r   r   r   requires_forkr   r   r   r   r   r      sa        , , ,,	 	 	6 6 6   ]  r   r   c                   .    e Zd Z	 d Zd Zd Zd Zd ZdS )
RLockTestsc                    |                                  }|                                 |                                 |                                 |                                 |                                 |                                 d S r   rT   rG   s     r   r   zRLockTests.test_reacquire-  sa    }}r   c                    |                                  }|                     t          |j                   |                                 |                                 |                                 |                                 |                                 |                                 |                     t          |j                   d S r   )rF   rs   RuntimeErrorrU   rO   rG   s     r   test_release_unacquiredz"RLockTests.test_release_unacquired6  s    }},555,55555r   c                    |                                  }|                     t          |j                   |                                 |                                 |                                 |                                 |                                 |                                 |                     t          |j                   d S r   )rF   rs   r   _release_saverO   rU   rG   s     r   test_release_save_unacquiredz'RLockTests.test_release_save_unacquiredB  s    }},(:;;;,(:;;;;;r   c                 "   |                                  fd}t          |dd          }	 |                     t          j                   |                                 n# |                                 w xY w|                                 d S )Nc                  0                                       d S r   )rO   rh   s   r   r   z+RLockTests.test_different_thread.<locals>.fQ  r   r   r`   T)rF   r   rs   r   rU   r/   r,   r   s      @r   r   z RLockTests.test_different_threadN  s    }}	 	 	 	 	!Q	lDL999KKMMMMAKKMMMM	s    A" "A8c                    |                                  |                                                                                                 |                                                                                                 |                                                                g fd}t          |d                                           |                     d                                                     |                                                                                                 |                                                                d S )Nc                  V                                                                     d S r   )r   	_is_ownedr^   s   r   r   z$RLockTests.test__is_owned.<locals>.fb  s%    MM$..**+++++r   r`   r   )rF   ra   r   rO   rY   r   r,   rU   rb   s     @@r   test__is_ownedzRLockTests.test__is_ownedZ  s0   }}))***(()))(()))	, 	, 	, 	, 	, 	,a%%'''###(()))))*****r   N)r0   r1   r2   r   r   r   r   r   r   r   r   r   r   )  sd          
6 
6 
6
< 
< 
<
 
 
+ + + + +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   )	eventtypera   is_setsetrY   clearr   evts     r   test_is_setzEventTests.test_is_setq  s    nn&&&			

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

%%%		&&&		&&&&&r   c                    d}g g fd}t          ||          }|                                 t                       |                     t	                    d                                            |                                 |                     dg|z             |                     dg|z             d S )Nre   c                                                                                                                                                        d S r   r   wait)r   results1results2s   r   r   z#EventTests._check_notify.<locals>.f  s=    OOCHHJJ'''OOCHHJJ'''''r   r   T)r   r)   r   rj   r'   r   r,   )r   r   rk   r   rl   r   r   s    `   @@r   _check_notifyzEventTests._check_notify}  s    	( 	( 	( 	( 	( 	( 	( !QKK	X***				D6A:...D6A:.....r   c                     |                                  }|                     |           |                                 |                                 |                     |           d S r   )r   r   r   r   r   s     r   test_notifyzEventTests.test_notify  sY    nn3					3r   c                    |                                  g g d}fd}t          ||                                           |                     dg|z             D ]0\  }}|                     |           |                     |d           1g g                                  t          ||                                           |                     dg|z             D ]\  }}|                     |           d S )Nre   c                                                              d                     t          j                    }                     d          }t          j                    }                     ||| z
  f           d S )Ng        r   )r   r   r	   r   )r   rr   r   r   r   s      r   r   z"EventTests.test_timeout.<locals>.f  sh    OOCHHSMM***!!BA!!BOOQRL)))))r   Fr   T)r   r   r,   rj   ra   rB   r   rY   )r   rk   r   r   dtr   r   r   s        @@@r   r   zEventTests.test_timeout  s=   nn	* 	* 	* 	* 	* 	* 	* 	a%%'''E7Q;/// 	( 	(EArQr3''''			a%%'''D6A:... 	 	EArOOA	 	r   c                 j   |                                  g dd}fd}t          ||          }|                                 t          j                                                                                     |                                 |                     dg|z             d S )Ng      ?re   c                  ^                                              dz                       d S N   r   )r   r   r}   s   r   r   z(EventTests.test_set_and_clear.<locals>.f  s+    NN388GaK0011111r   T)	r   r   r)   r	   r
   r   r   r,   rj   )r   rk   r   rl   r   r   r}   s       @@@r   test_set_and_clearzEventTests.test_set_and_clear  s     nn	2 	2 	2 	2 	2 	2 	2!QKK	
7						4&1*-----r   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 rX   )r   _condra   rO   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   rK   rL   r   r   s     r   rM   zEventTests.test_repr  s^    nnc$@AAA			c$>?????r   N)r0   r1   r2   r   r   r   r   r   r   r   rM   r   r   r   r   r   l  s        
' 
' 
'/ / /"       2. . ." 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 rX   )condtyperO   rU   r   Lockra   rY   )r   condrH   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   rs   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   rs   r   notifyr   s     r   test_unacquired_notifyz%ConditionTests.test_unacquired_notify  s-    }},44444r   c                    d}g g g dfd}t          ||          }|                                 t                    dk     r!t                       t                    dk     !                                 |                     g                                                                 d           t                       d                                 t                    dk     r!t                       t                    dk     !|                     dgdz             |                     g            t                    dk     r!t                       t                    dk     !                                                     d           t                       d                                 t                    t                    z   dk     r1t                       t                    t                    z   dk     1|                     dgdz  d	gdz  z              |                     d	gdz             t                    dk     r!t                       t                    dk     !                                 	                                 t                       d                                 t                    dk     r!t                       t                    dk     !|                     dgdz  d	gdz  z              |                     d	gdz  d
gdz  z              |
                                 d S )Nre   r   c                                                                                                                      }                                                      | f                                                                                                            }                                                      | f           d S r   )rO   r   r   rU   )r_   r   	phase_numreadyr   r   s    r   r   z'ConditionTests._check_notify.<locals>.f  s    LLNNNLL###YY[[FLLNNNOOVY/000LLNNNLL###YY[[FLLNNNOOVY/00000r      r`   )Tr`   r      )Tr   )Tr   )r   r)   r'   r   r   rj   rO   r   rU   
notify_allr,   )	r   r   rk   r   rl   r   r   r   r   s	    `   @@@@r   r   zConditionTests._check_notify  s2    	
	1 
	1 
	1 
	1 
	1 
	1 
	1 
	1 
	1 !QKK	 %jj1nnGGG %jj1nn2&&&A	(mmaGGG (mmaI;?3332&&&%jj1nnGGG %jj1nn 	A	(mmc(mm+a//GGG (mmc(mm+a//I;?i[1_#DEEEI;?333%jj1nnGGG %jj1nn 		(mmaGGG (mmaI;?hZ!^#CDDDI;?i[1_#DEEE	r   c                     |                                  }|                     |           |                     |           d S r   )r   r   r   s     r   r   zConditionTests.test_notify;  s=    }}4   4     r   c                 6   |                                  g d}fd}t          ||                                           |                     t	                    |           D ]0\  }}|                     |d           |                     |           1d S )Nre   c                                                       t          j                    }                     d          }t          j                    }                                                     || z
  |f           d S )Nr   )rO   r	   r   r   rU   r   )r   r_   r   r   r   s      r   r   z&ConditionTests.test_timeout.<locals>.fE  sg    LLNNN!!BYYs^^F!!BLLNNNNNBGV,-----r   r   )r   r   r,   rj   r'   rB   ra   )r   rk   r   r   r_   r   r   s        @@r   r   zConditionTests.test_timeoutA  s    }}	. 	. 	. 	. 	. 	. 	a%%'''Wq)))! 	% 	%JBr3''' V$$$$	% 	%r   c                 h                                      d fd}t          |d          }|                                 t          d          D ]I}t	          j        d           5  dz                                   d d d            n# 1 swxY w Y   J|                                 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 r   r   states   r   <lambda>z8ConditionTests.test_waitfor.<locals>.f.<locals>.<lambda>\      q r   r   )wait_forrY   rj   )r_   r   r   r   s    r   r   z&ConditionTests.test_waitfor.<locals>.fZ  s     + +'8'8'8'899'''  ***+ + + + + + + + + + + + + + + + + +s   AAAAr`   r   r   )r   r   r)   r"   r	   r
   r   r,   )r   r   rl   r$   r   r   s   `   @@r   test_waitforzConditionTests.test_waitforW  s   }}	+ 	+ 	+ 	+ 	+ 	+ 	+
 !QKK	q 	 	AJt  
               	
s   ,BB	B	c                                                       dg  fd}t          |d          }|                                 t          d          D ]I}t	          j        d           5  dz                                   d d d            n# 1 swxY w Y   J|                                                      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>o  r   r   g?r|   )r	   r   r   ra   rB   r   )r   r_   r   r   r   successs     r   r   z.ConditionTests.test_waitfor_timeout.<locals>.fl  s     % %^%%'8'8'8'8#FF^%%*  (((""2s+++t$$$% % % % % % % % % % % % % % % % % %s   BBBBr`   r   r   )
r   r   r)   r"   r	   r
   r   r,   rj   r'   )r   r   rl   r$   r   r   r   s   `   @@@r   test_waitfor_timeoutz#ConditionTests.test_waitfor_timeouth  s3   }}	% 	% 	% 	% 	% 	% 	% 	% !QKK	q 	 	AJt  
               	
Wq)))))s   0BB	B	N)r0   r1   r2   r   r   r   r   r   r   r   r   r   r   r   r   r     s        2 2 2&3 3 35 5 5H H HT! ! !% % %,  "* * * * *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)rs   r   semtypesysmaxsizer(   s    r   rI   z#BaseSemaphoreTests.test_constructor  sF    *dlB???*dlS[LIIIIIr   c                 J   |                      d          }|                                 |                                 |                      d          }|                                 |                                 |                                 |                                 d S )Nr`   r   )r  rO   rU   r   sems     r   r   zBaseSemaphoreTests.test_acquire  sr    ll1ooll1oor   c                 X    |                                  }|                                 ~d S r   )r  rO   r  s     r   rR   z'BaseSemaphoreTests.test_acquire_destroy  s#    llnnCCr   c                 H  	 |                      d                                           d}g 	g g d	fd}t          |d          }|                                 t	                    t	                    z   dk     r1t                       t	                    t	                    z   dk     1|                     z   dgdz             dt          d          D ]}                                 t	                    t	                    z   dk     r1t                       t	                    t	                    z   dk     1|                     t          z             dgdz  dgdz  z              dt          d          D ]}                                 t	                    t	                    z   d	k     r1t                       t	                    t	                    z   d	k     1|                     t          z             dgdz  dgdz  z   dgdz  z              | 
                                        d
                                                      |                                 |                     	dgdz             d S )N   
   r   c                                                                                                                                                                                                                        d S r   r]   )r   r   r   r  sem_resultss   r   r   z4BaseSemaphoreTests.test_acquire_contended.<locals>.f  se    s{{}}---OOI&&&s{{}}---OOI&&&&&r      r`      r      FT   )r  rO   r   r)   r'   r   rj   r"   rU   sortedra   r,   )
r   rk   r   rl   r$   r   r   r   r  r  s
        @@@@@r   rm   z)BaseSemaphoreTests.test_acquire_contended  s   ll1oo		' 	' 	' 	' 	' 	' 	' 	' 	'
 !RLL	(mmc(mm+a//GGG (mmc(mm+a//H,qcAg666	q 	 	AKKMMMM(mmc(mm+b00GGG (mmc(mm+b008 344qcAga6GHHH	q 	 	AKKMMMM(mmc(mm+b00GGG (mmc(mm+b008 344qcAga6G1#PQ'6QRRRU++,,,	tf&>?????r   c                    |                      d                                           g g dfd}t          |d          }|                                 t	                    t	                    z   dk     r1t                       t	                    t	                    z   dk     1|                     z   dgdz             d                    d           t	                    t	                    z   dk     r1t                       t	                    t	                    z   dk     1|                     t          z             dgdz  dgdz  z              d                    d           t	                    t	                    z   d	k     r1t                       t	                    t	                    z   d	k     1|                     t          z             dgdz  dgdz  z   dgdz  z              | 	                                        d
                                                      |
                                 d S )Nr
  r   c                                                                                                                                                          d S r   r   )r   r   r   r  s   r   r   z/BaseSemaphoreTests.test_multirelease.<locals>.f  sG    KKMMMOOI&&&KKMMMOOI&&&&&r   r  r  r`   r  r   r  F)r  rO   r   r)   r'   r   rj   rU   r  ra   r,   )r   r   rl   r   r   r   r  s      @@@@r   test_multireleasez$BaseSemaphoreTests.test_multirelease  sE   ll1oo		' 	' 	' 	' 	' 	' 	' 	'
 !RLL	(mmc(mm+a//GGG (mmc(mm+a//H,qcAg666	A(mmc(mm+b00GGG (mmc(mm+b008 344qcAga6GHHH	A(mmc(mm+b00GGG (mmc(mm+b008 344qcAga6G1#PQ'6QRRRU++,,,	r   c                    |                      d          }|                     |                    d                     |                     |                    d                     |                     |                    d                     |                                 |                     |                    d                     d S )Nr   F)r  rY   rO   ra   rU   r  s     r   rZ   z#BaseSemaphoreTests.test_try_acquire  s    ll1ooE**+++E**+++U++,,,E**+++++r   c                    |                      d                                           g fd}t          |d                                           |                     t                    dgdz  dgdz  z              d S )Nr   c                                                                d                                                               d                     d S rX   r]   )r   r  s   r   r   z8BaseSemaphoreTests.test_try_acquire_contended.<locals>.f  sE    NN3;;u--...NN3;;u--.....r   re   Fr
  Tr   )r  rO   r   r,   rj   r  )r   r   r   r  s     @@r   rc   z-BaseSemaphoreTests.test_try_acquire_contended  s    ll1oo	/ 	/ 	/ 	/ 	/ 	/ 	a%%''' 	5'A+!*CEEEEEr   c                    |                      d          }|                     t          |j        dd           |                     |                    d                     |                     |                    d                     |                     |                    d                     |                                 |                     |                    d                     t          j                    }|                     |                    d                     t          j                    |z
  }| 	                    |d           d S )Nr   F      ?r|   g{Gzt?r   )
r  rs   r   rO   rY   ra   rU   r	   r   rB   )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                 J   |                                                                   fd}t          |d          }|                                 t	                       |                     |j                                                    |                                 d S )Nc                  X                                                                         d S r   rg   )r  s   r   r   z0BaseSemaphoreTests.test_default_value.<locals>.f  s!    KKMMMKKMMMMMr   r`   )	r  rO   r   r)   r   ra   r   rU   r,   )r   r   rl   r  s      @r   test_default_valuez%BaseSemaphoreTests.test_default_value  s    llnn	 	 	 	 	 !QKK	$$$	r   c                                           d          d fd	} |                                                      d                                                                           t
          |t
                                                              d                                                      d S )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 rX   )rY   rO   rU   ra   )rq   r   r  s    r   rr   z+BaseSemaphoreTests.test_with.<locals>._with  s%    " "E 2 2333 " "$$S[[%7%7888 "!	"" " " " " " " " " " " " " " "" " " " " " " " " " " " " " " " " "s5   ?B-A=1B=B	BB	BBBFr   )r  rY   rO   rU   rs   rt   )r   rr   r  s   ` @r   ru   zBaseSemaphoreTests.test_with  s    ll1oo	" 	" 	" 	" 	" 	" 	" 	E**+++)UI666E**+++r   N)r0   r1   r2   rI   r   rR   rm   r  rZ   rc   r  r  ru   r   r   r   r   r     s        J J J    
#@ #@ #@J  @, , ,F F F$ $ $      r   r   c                       e Zd Z	 d Zd ZdS )SemaphoreTestsc                     |                      d          }|                                 |                                 |                                 |                                 d S Nr`   )r  rU   rO   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  rK   rL   rO   rU   r  s     r   rM   zSemaphoreTests.test_repr+  s    ll1ooc$FGGGc$FGGGc$FGGGGGr   Nr0   r1   r2   r   rM   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  rs   r   rU   rO   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  rK   rL   rO   r  s     r   rM   zBoundedSemaphoreTests.test_reprB  s^    ll1ooc$OPPPc$OPPPPPr   Nr'  r   r   r   r)  r)  5  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 )BarrierTestsre   g       @c                 R    |                      | j        | j                  | _        d S )Nr|   )barriertyperk   defaultTimeoutbarrierr(   s    r   r8   zBarrierTests.setUpP  s%    ''8K'LLr   c                 8    | j                                          d S r   )r1  abortr(   s    r   r<   zBarrierTests.tearDownR  s    r   c                 r    t          || j        dz
            } |             |                                 d S r%  )r   rk   r,   )r   r   rl   s      r   run_threadszBarrierTests.run_threadsU  s:    !TVAX		r   c                 |   | j         j        }|                     || j                   t	          |          D ]}|d                             d           |                     t          |d                   ||z             | j                                          |d                             d           |                     t          |d                   |dz   |z             | j                                          |                     | j         j        d           | 	                    | j         j
                   d S )Nr   Tr`   )r1  partiesrj   rk   r"   r   r'   r   	n_waitingra   broken)r   r   r   mr$   s        r   	multipasszBarrierTests.multipassZ  s   L DF###q 	  	 AAJd###S__a!e444LAJd###S__q1uk:::L/333,-----r   r`   c                 N     	 g g g fd}                      |           d S )Nc                  4                                     d S r   )r;  )passesr   r   s   r   r   z$BarrierTests.test_barrier.<locals>.fl  s    NN7F+++++r   r5  )r   r>  r   r   s   `` @r   test_barrierzBarrierTests.test_barrierg  sR    	 b'	, 	, 	, 	, 	, 	, 	,r   c                 .    	 |                      d          S )Nr  )r@  r(   s    r   test_barrier_10zBarrierTests.test_barrier_10p  s    	   $$$r   c                      	 g  fd}                      |                                t                    t          t           j                                       d S )Nc                  d    j                                         }                     |            d S r   )r1  r   r   )r   r   r   s    r   r   z(BarrierTests.test_wait_return.<locals>.f{  s.    !!##ANN1r   )r5  rj   sumr"   rk   )r   r   r   s   ` @r   test_wait_returnzBarrierTests.test_wait_returnv  sv    	 	 	 	 	 	 	 	Ws5=='9'9:::::r   c                      	 g fd}                       j        |           fd}                     |           d S )Nc                  2                          d           d S r.   )r   )r   s   r   actionz(BarrierTests.test_action.<locals>.action  s    NN4     r   c                  v                                                           t                    d           d S r%  )r   rj   r'   )r1  r   r   s   r   r   z#BarrierTests.test_action.<locals>.f  s2    LLNNNS\\1-----r   r/  rk   r5  )r   rI  r   r1  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)r1  r   rk   r   r   r   BrokenBarrierErrorr3  )r$   r   r   r   s    r   r   z"BarrierTests.test_abort.<locals>.f  s    
L%%''	>>&&!!###%%%%%/ & & &%%%%%%   ""$$$s   AA! !$B."B.-B.r   r`   )r5  rj   r'   rk   rY   r1  r9  )r   r   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    r^j         j        j        dz
  k     r,t	          j        d           j         j        j        dz
  k     ,j                                          nZ	 j                                                              d           n*# t          j	        $ r                     d           Y nw xY wj                                                              d           d S )Nr   r`   gMbP?T)
r1  r   rk   r8  r	   r
   resetr   r   rP  )r$   r   r   results3r   s    r   r   z"BarrierTests.test_reset.<locals>.f  s   !!##ADFAI~~l,tvax77Ju%%% l,tvax77""$$$$*L%%'''OOD)))) 3 * * *OOD)))))* LOOD!!!!!s   .B7 7$CCr   r`   )r5  rj   r'   rk   )r   r   r   r   rU  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 rO  )	r1  r   rk   r   r   r   rP  r3  rT  )r$   barrier2r   r   rU  r   s    r   r   z,BarrierTests.test_abort_and_reset.<locals>.f  s"   
L%%''	>>&&!!###%%%%/ & & &%%%%%   ""$$$ }}$&!)++""$$$MMOOOLOOD!!!!!s   AA   $B+"B+*B+r   r`   )r/  rk   r5  rj   r'   )r   r   rY  r   r   rU  s   ` @@@@r   test_abort_and_resetz!BarrierTests.test_abort_and_reset  s    	 ##DF++	" 	" 	" 	" 	" 	" 	" 	" 	"* 	X***Xq111X/////r   c                 >     	  fd}                      |           d S )Nc                      j                                         } | j        dz  k    rt          j        d                               t          j        j         j        d           d S )Nr   r  r   )r1  r   rk   r	   r
   rs   r   rP  )r$   r   s    r   r   z$BarrierTests.test_timeout.<locals>.f  se    !!##ADFaK
3i:"l/6 6 6 6 6r   r?  )r   r   s   ` r   r   zBarrierTests.test_timeout  s=    		6 	6 	6 	6 	6 	r   c                 z     	                        j        d           fd}                     |           d S )Ng333333?r|   c                                                       } | j        dz  k    rt          j        d                               t
          j        j                    d S )Nr   r  )r   rk   r	   r
   rs   r   rP  )r$   r1  r   s    r   r   z,BarrierTests.test_default_timeout.<locals>.f  sO    ADFaK
3i:GLIIIIIr   rK  )r   r   r1  s   ` @r   test_default_timeoutz!BarrierTests.test_default_timeout  se    	 ""463"77	J 	J 	J 	J 	J 	J 	r   c                     |                      d          }|                                 |                                 d S r%  )r/  r   )r   rl   s     r   test_single_threadzBarrierTests.test_single_thread  s3    Q		r   c                 >   |                      d          |                     t                    d           fd}t          |d          }|                                 t          j        d           |                     t                    d                               d           |                                 |                     t                    d           	                                 |                     t                    d           d S )Nr   z!<\w+\.Barrier at .*: waiters=0/3>c                  2                          d           d S )Nr   )r   )rl   s   r   r   z!BarrierTests.test_repr.<locals>.f  s    FF1IIIIIr   r   g?z!<\w+\.Barrier at .*: waiters=2/3>z<\w+\.Barrier at .*: broken>)
r/  rK   rL   r   r)   r	   r
   r   r,   r3  )r   r   bunchrl   s      @r   rM   zBarrierTests.test_repr	  s   Qa"FGGG	 	 	 	 	a   
3a"FGGG	q			!!!a"FGGG				a"ABBBBBr   N)r`   )r0   r1   r2   rk   r0  r8   r<   r5  r;  r@  rB  rF  rL  rQ  rV  rZ  r   r_  ra  rM   r   r   r   r-  r-  I  s        	
ANM M M    
. . .   % % %
; 
; 
;  - - -00 0 0< 0  0  0D      
C C C C Cr   r-  )osr   r  r	   _threadr   r   r   unittestr   testr   test.supportr   
skipUnlesshas_fork_supportr   r   objectr   TestCaser4   rD   r   r   r   r   r   r#  r)  r-  r   r   r   <module>rn     s   
			 				 



  1 1 1 1 1 1 1 1             ) ) ) ) ) ) $#G$<%CD D
  . . . . .F . . .b1 1 1 1 18$ 1 1 1"E! E! E! E! E!L E! E! E!PA A A A A A A AH@+ @+ @+ @+ @+ @+ @+ @+Fb@ b@ b@ b@ b@ b@ b@ b@Jl* l* l* l* l*\ l* l* l*^\ \ \ \ \ \ \ \|H H H H H' H H H.Q Q Q Q Q. Q Q Q(MC MC MC MC MC< MC MC MC MC MCr   