python (3.11.7)

(root)/
lib/
python3.11/
test/
__pycache__/
lock_tests.cpython-311.opt-1.pyc

edZddlZddlZddlZddlZddlmZmZddlZddl	Z	ddl
Z
ddlmZddl
mZe	jejdZdZGdd	eZGd
de	jZGdd
eZGddeZGddeZGddeZGddeZGddeZGddeZGddeZGddeZdS)z/
Various tests for synchronization primitives.
N)start_new_threadTIMEOUT_MAX)support)threading_helperz9platform doesn't support fork (no _at_fork_reinit method)c4tjd|zdS)N{Gz?)timesleep)nthreads C/BuggyBox/python/3.11.7/bootstrap/lib/python3.11/test/lock_tests.pywait_threads_blockedr
s	Juwc2eZdZdZd	dZdZdZdZdZdS)
Bunchz
    A bunch of threads.
    Fcj||_||_g|_g|_g|_||_d|_dS)z
        Construct a bunch of `nthread` threads running the same function `func`.
        If `wait_before_exit` is True, the threads won't terminate until
        do_finish() is called.
        N)funcrstartedfinished
exceptions	_can_exit_wait_thread)selfrrwait_before_exits    r__init__zBunch.__init__!s?	
-- rc
tj}|j|	|n1#t
$r$}|j|Yd}~nd}~wwxYw|j|tj	tj
D]}|jrdS
dS#|j|tj	tj
D]}|jrwwxYwN)	threading	get_identrappendr
BaseExceptionrrrsleeping_retry
SHORT_TIMEOUTr)rtidexc_s    rtaskz
Bunch.task/s%!##C   	IIKKKK	(	(	(O""3''''''''	(
M  %%%+G,ABB

>EE


M  %%%+G,ABB

>E
s0AB<
A2A-(B<-A22B<<ADcttjtj|_|j	t
|jD]}t|j	dn
#d|_
xYwtjtjD]!}t|j
|jkrn"|S)NT)rwait_threads_exitrr"r	__enter__rangerrr&rr!lenr)rr%s  rr*zBunch.__enter__<s,>w?TUU##%%%	4<((
0
0 B////
0	!DN'(=>>		A4<  DL001s,A++
A5ctjtjD]!}t|j|jkrn"|jddd|j}d|_|rt|j
d|dS)Nz threads raised exceptions)rr!r"r,rrr__exit__rExceptionGroupr)rexc_type	exc_value	tracebackr%rs      rr.zBunch.__exit__Ms'(=>>		A4=!!T\112	
""4t444_
	- DI!I!I!I!+--
-	-	-rcd|_dSNT)rrs r	do_finishzBunch.do_finish\s
rN)F)	__name__
__module____qualname____doc__rr&r*r.r6r(rrrrsn!!!!"
-
-
-rrc eZdZdZdZdZdS)BaseTestCasec6tj|_dSr)rthreading_setup_threadsr5s rsetUpzBaseTestCase.setUpas(8::


rcRtj|jtjdSr)rthreading_cleanupr?r
reap_childrenr5s rtearDownzBaseTestCase.tearDownds'*DM::rcj|||dz|||dzdS)Ng333333?g$@)assertGreaterEqual
assertLess)ractualexpecteds   r
assertTimeoutzBaseTestCase.assertTimeouths<	
3777400000rN)r7r8r9r@rDrJr(rrr<r<`sA;;;   11111rr<cfeZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdS)
BaseLockTestsz;
    Tests for both recursive and non-recursive locks.
    ctjtjD]}t||krn|t||dSr)rr!r"r,assertEqual)rphaserIr%s    r
wait_phasezBaseLockTests.wait_phasevs\'(=>>		A5zzX%%&UX.....rc0|}~dSr)locktyperlocks  rtest_constructorzBaseLockTests.test_constructor|s}}DDrcv|}|t|d~dS)Nz<unlocked .* object (.*)?at .*>)rRassertRegexreprrSs  r	test_reprzBaseLockTests.test_reprs3}}d%FGGGDDrc|}||t|d~dS)Nz<locked .* object (.*)?at .*>)rRacquirerWrXrSs  rtest_locked_reprzBaseLockTests.test_locked_reprs@}}d%DEEEDDrcX|}|~dSr)rRr[rSs  rtest_acquire_destroyz"BaseLockTests.test_acquire_destroys#}}DDrc|}||~dSrrRr[releaserSs  rtest_acquire_releasez"BaseLockTests.test_acquire_releases0}}DDrc|}||d|dSNF)rR
assertTruer[rarSs  rtest_try_acquirezBaseLockTests.test_try_acquires>}}U++,,,rc|gfd}t|d5	dddn#1swxYwY|ddS)NcXddSrdrr[rTresultsrfz3BaseLockTests.test_try_acquire_contended.<locals>.fs'MM$,,u--.....rr)rRr[rassertFalserarrlrTrks  @@rtest_try_acquire_contendedz(BaseLockTests.test_try_acquire_contendeds}}	/	/	/	/	/	/
1a[[																	###sAAAc|fd}d}t||5}t||t|jddddn#1swxYwY|t|j|dS)NcXdSrr[rarTsrrlz/BaseLockTests.test_acquire_contended.<locals>.f!LLNNNLLNNNNNrr)rRr[rr
rNr,rra)rrlNbunchrTs    @rtest_acquire_contendedz$BaseLockTests.test_acquire_contendeds}}					

1a[[	E ###S00!444
LLNNN
																
U^,,a00000sABB Bc|fd}dfd	}5	dddn#1swxYwYt|d5	dddn#1swxYwY|t55t#1swxYwY	dddn#1swxYwYt|d5	ddddS#1swxYwYdS)NcXdSrrsrtsrrlz"BaseLockTests.test_with.<locals>.frurcH5||	ddddS#1swxYwYdSrr()errrTs r	with_lockz*BaseLockTests.test_with.<locals>.with_locks|

?I#

















srmr)rRrassertRaises	TypeError)rrlr~rTs   @r	test_withzBaseLockTests.test_withs3}}																												1a[[																	

y
)
)	 	 
 
 
 
 
 
 
 
 
 
 
 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 1a[[																				s`155AA!A?B"B

B	B"B	B""B&)B&=CCCc|fd}t|d5	ddddS#1swxYwYdS)NcXdSrrsrtsrrlz)BaseLockTests.test_thread_leak.<locals>.frur)rRrrrlrTs  @rtest_thread_leakzBaseLockTests.test_thread_leaks}}					1b\\																				s
:>>cP||tjdd|tjd|tjd|tjt
dzt
tj}|	dtj}|
||z
dgfd}t|d5	dddn#1swxYwY|d|
dd	dS)
NFrmitimeoutg}Ô%ITrvctj}dtj}||z
dS)N?r)r		monotonicrr[)t1t2rTresultss  rrlz%BaseLockTests.test_timeout.<locals>.fsY!!BNN4<<<44555!!BNN27#####rrr)rRr
ValueErrorr[
OverflowErrorrrar	rrerGrrnrJ)rrrrlrTrs    @@rtest_timeoutzBaseLockTests.test_timeouts}}*dlE1===*dlDAAA-uEEE-{QOOO[)))
^

Q//000
^

R###	$	$	$	$	$	$
1a[[																	$$$71:s+++++sE$$E(+E(c|}tj|}||dSr)rRweakrefrefassertIsNotNonerrTrs   rtest_weakref_existsz!BaseLockTests.test_weakref_existss>}}k$SSUU#####rc|}tj|}~tj||dSr)rRrrgccollectassertIsNoners   rtest_weakref_deletedz"BaseLockTests.test_weakref_deletedsL}}k$

##%%     rN)r7r8r9r:rPrUrYr\r^rbrfrpryrrrrrr(rrrLrLqs///


			111$:,,,6$$$
!!!!!rrLc:eZdZdZdZdZdZedZdS)	LockTestszn
    Tests for non-recursive, weak locks
    (which can be acquired and released from different threads).
    c:|gfd}tj5t|d|d|dddddS#1swxYwYdS)NcdddSrr[r)rTrOsrrlz#LockTests.test_reacquire.<locals>.fsGLLNNNLLLLNNNLLrr(rm)rRrr)rrPrarrlrTrOs  @@rtest_reacquirezLockTests.test_reacquires}}						
/
1
1	&	&Q###OOE1%%%
LLNNNOOE1%%%	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&	&sABBBc|fd}t|d5	dddn#1swxYwYdS)Nc0dSr)rartsrrlz*LockTests.test_different_thread.<locals>.f'LLNNNNNrrm)rRr[rrars  @rtest_different_threadzLockTests.test_different_thread#s}}					
1a[[																	sA

AAcp|}|||d|||||ddS)NrrF)blocking)rRr[rnralockedrerSs  rtest_state_after_timeoutz"LockTests.test_state_after_timeout.s}}d33444'''e4455555rcd}|}||||}||||dS)NcV||dSrrsrts ruse_lockz/LockTests.test_at_fork_reinit.<locals>.use_lock:s"
LLNNNLLNNNNNr)rR_at_fork_reinitr[)rrrTlock2s    rtest_at_fork_reinitzLockTests.test_at_fork_reinit8s~			}}





rN)	r7r8r9r:rrr
requires_forkrr(rrrr
sf&&&(			666]rrc6eZdZdZdZdZdZdZdZdZ	dS)	
RLockTestsz$
    Tests for recursive locks.
    c|}||||||dSrr`rSs  rrzRLockTests.test_reacquirePsa}}rc|}|t|j|||||||t|jdSr)rRrRuntimeErrorrar[rSs  rtest_release_unacquiredz"RLockTests.test_release_unacquiredYs}},555,55555rc|}|t|j|||||||t|jdSr)rRrr
_release_saver[rarSs  rtest_release_save_unacquiredz'RLockTests.test_release_save_unacquiredes}},(:;;;,(:;;;;;rc`dddddgfd}tj5t|ddd	dddddddS#1swxYwYdS)NrrmrcddddS)Nr)r[rrPra)rTrOrsrrlz*RLockTests.test_recursion_count.<locals>.fs[LLNNNLLOOE1%%%LLNNNLLrr()
rRrN_recursion_countr[rarr)rrPrrs` @@rtest_recursion_countzRLockTests.test_recursion_countqs7}}D1133444D1133444D1133444D1133444D1133444							
/
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		9s4B"H##H'*H'c.|fd}t|dd5}	|tj|n#|wxYw	ddddS#1swxYwYdS)Nc0dSr)r[rtsrrlz+RLockTests.test_different_thread.<locals>.frrrmT)rRrrrrar6)rrlrxrTs   @rrz RLockTests.test_different_threads}}					1a

	"%
"!!,===!!!!!!!!!		"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"s(B
 A#B
#A99B

BBc||||gfd}t|d5	dddn#1swxYwY|d||dS)NcVdSr)r	_is_ownedrjsrrlz$RLockTests.test__is_owned.<locals>.fs%MM$..**+++++rrmr)rRrnrr[rerraros  @@rtest__is_ownedzRLockTests.test__is_owneds|}}))***(()))(()))	,	,	,	,	,	,
1a[[																	###(()))))*****sCC!CN)
r7r8r9r:rrrrrrr(rrrrLsy
6
6
6
<
<
<!9!9!9F
"
"
"+++++rrcLeZdZdZdZdZdZdZdZe	dZ
dZd	S)

EventTestsz"
    Tests for Event objects.
    cT|}||||||||||||||dSr)	eventtypernis_setsetreclearrevts  rtest_is_setzEventTests.test_is_setsnn&&&			

%%%			

%%%		&&&		&&&&&rcjd}ggfd}t||5t||tddddn#1swxYwY|dg|z|dg|zdS)NrvcdSr)rwait)rresults1results2srrlz#EventTests._check_notify.<locals>.fs=OOCHHJJ'''OOCHHJJ'''''rrT)rr
rNr,r)rrrwrlrrs `  @@r
_check_notifyzEventTests._check_notifys
	(	(	(	(	(	(	(1a[[		 ###S]]A...
GGIII
																
D6A:...D6A:.....sAA44A8;A8c|}||||||dSr)rrrrrs  rtest_notifyzEventTests.test_notifysYnn3					3rc*|ggd}fd}t||5	dddn#1swxYwY|dg|zD]0\}}||||d1ggt||5	dddn#1swxYwY|dg|zD]\}}||dS)Nrvcdtj}d}tj}|||z
fdS)Ngr)rrr	r)rrrrrrs   rrlz"EventTests.test_timeout.<locals>.fshOOCHHSMM***!!B

A!!BOOQRL)))))rFrT)rrrNrnrJrre)rrwrlrdtrrrs     @@@rrzEventTests.test_timeoutsnn
	*	*	*	*	*	*	*1a[[																		
E7Q;///	(	(EArQr3''''			
1a[[																		
D6A:...		EArOOA		s#AA
ACCCc8|gfd}d}t||5t|dddn#1swxYwY|dg|zdS)NcltjdSr)rrrLONG_TIMEOUT)eventrsrrlz(EventTests.test_set_and_clear.<locals>.fs*NN5::g&:;;<<<<<rrvT)rrr
rrrN)rrlrwrrs   @@rtest_set_and_clearzEventTests.test_set_and_clears  	=	=	=	=	=	=

1a[[		 ###
IIKKKKKMMM
																
4&1*-----s8A55A9<A9c|}|j5||jddddn#1swxYwY||j5||jdddddS#1swxYwYdSrd)r_condrnr[rrs  rrzEventTests.test_at_fork_reinits6nn
Y	7	7SY..u55666	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7
Y	7	7SY..u55666	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7s#.AAA<.B77B;>B;c|}|t|d||t|ddS)Nz<\w+\.Event at .*: unset>z<\w+\.Event at .*: set>)rrWrXrrs  rrYzEventTests.test_reprs^nnc$@AAA			c$>?????rN)r7r8r9r:rrrrrrrrYr(rrrrs
'
'
'///(   >...&77]7@@@@@rrcBeZdZdZdZdZdZdZdZdZ	dZ
d	Zd
S)ConditionTestsz(
    Tests for condition variables.
    c|}||||tj}||}|||d|||d||d||5||dddddS#1swxYwYdSrd)condtyper[rarLockrnre)rcondrTs   rtest_acquirezConditionTests.test_acquire(sr}}	
~}}T""e,,---U++,,,e,,---
	2	2T\\%00111	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2s)E99E=E=cn|}|t|jdSr)rrrrrrs  rtest_unacquired_waitz#ConditionTests.test_unacquired_wait;s-}},	22222rcn|}|t|jdSr)rrrnotifyrs  rtest_unacquired_notifyz%ConditionTests.test_unacquired_notify?s-}},44444rc	
gg	g
d	
fd}d}t||5tjtjD]}t	|krn|	gd}|t|d
tjtjD]}t		|krn|	dg|z|
gtjtjD]}t	|krndt|d
tjtjD]*}t		t	
z||zkrn+||z
}|	dg|zdg|zz|
dg|ztjtjD]}t	|krnt|d
tjtjD]}t	
|krn|	dg|zdg|zz|
dg|zd	g|zzddddS#1swxYwYdS)
Nrc}|f}|fdSr)r[rrra)rkr	phase_numreadyrrs rrlz'ConditionTests._check_notify.<locals>.fSsLLNNNLL###YY[[FLLNNNOOVY/000LLNNNLL###YY[[FLLNNNOOVY/00000rrvrrm)Trmr)Tr)Tr)rrr!r"r,rrNr[rr
ra
notify_all)rrrlrwr%count1count2rrrrs `     @@@@rrzConditionTests._check_notifyCs	
	1
	1
	1
	1
	1
	1
	1
	1
	1

1a[[@	T@	T+G,ABB

u::??E#
KKMMMXr***FLLNNNKK (((ILLNNN+G,ABB

x==F**E+
X	{V';<<<Xr***+G,ABB

u::''E(
LLNNNKKNNN ###ILLNNN+G,ABB

x==3x==0QZ@@EAZFX	{V';ykF>R'RSSSX	{V';<<<+G,ABB

u::??E#
LLNNNOO ###ILLNNN+G,ABB

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@	TsLMMMc|}||||dSr)rrrs  rrzConditionTests.test_notifys=}}4   4     rcL|dgfd}d}t||5	dddn#1swxYwY|t|D]0\}}||||1dS)Nrctj}}tj}||z
|fdSr)r[r	rrrar)rrkrrrrs   rrlz&ConditionTests.test_timeout.<locals>.fsiLLNNN!!BYYw''F!!BLLNNNNNBGV,-----rrv)rrrNr,rJrn)rrlrwrrkrrrs     @@@rrzConditionTests.test_timeouts}}	.	.	.	.	.	.	.

1a[[																	Wq)))!	%	%JBr7+++
V$$$$	%	%sAA
AcLdfd}t|d5tdD]I}tjd5dz
dddn#1swxYwYJ	ddddS#1swxYwYdS)Nrc5fd}|dddddS#1swxYwYdS)NcdkSNr(statesr<lambda>z8ConditionTests.test_waitfor.<locals>.f.<locals>.<lambda>suzrr)wait_forrerN)rkrrrs rrlz&ConditionTests.test_waitfor.<locals>.fs
+
+'9'9'9'9::'''  ***
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+sAAAArmrr)rrr+r	r
r)rrlirrs`  @@rtest_waitforzConditionTests.test_waitforsJ}}	+	+	+	+	+	+	+1a[[	"	"1XX
"
"
5!!!""QJEKKMMM"""""""""""""""
"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"s5(BA?3B?BBBBB Bcdgfd}t|d5tdD]I}tjd5dz
dddn#1swxYwYJ	dddn#1swxYwYtddS)NrcD5tj}fdd}tj|z
}||ddddddS#1swxYwYdS)NcdkSrr(rsrrz@ConditionTests.test_waitfor_timeout.<locals>.f.<locals>.<lambda>sqr皙?r)r	rrrnrJr)rrkrrrsuccesss  rrlz.ConditionTests.test_waitfor_timeout.<locals>.fs
%
%^%%'8'8'8'8#FF^%%*  (((""2s+++t$$$

%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%sBBBBrmrr)rrr+r	r
rrNr,)rrlrrrr
s`  @@@rtest_waitfor_timeoutz#ConditionTests.test_waitfor_timeoutsj}}	%	%	%	%	%	%	%	%1a[[	"	"1XX
"
"
5!!!""QJEKKMMM"""""""""""""""
"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	"	
Wq)))))s5(BB7BBB
BBB #B N)r7r8r9r:rrrrrrrrr(rrrr#s222&333555`T`T`TD!!!%%%4""" *****rrcNeZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dS)
BaseSemaphoreTestszB
    Common tests for {bounded, unbounded} semaphore objects.
    c|t|jd|t|jtjdS)N)value)rrsemtypesysmaxsizer5s rrUz#BaseSemaphoreTests.test_constructorsF*dlB???*dlS[LIIIIIrcJ|d}|||d}||||dS)Nrmr)rr[rarsems  rrzBaseSemaphoreTests.test_acquiresrll1oo





ll1oo













rcX|}|~dSr)rr[rs  rr^z'BaseSemaphoreTests.test_acquire_destroys#llnn


CCrc

d}||

gggd


fd}fd}d}t||5|dz
}|||zdg|zd
t	|D]}
|}|||z|t
zdg|zdg|zzd
|dz
}t	|D]}
|||z|z|t
zdg|zdg|zzdg|zz|
dd}	
dddn#1swxYwY|d	g||z|z|	zzdS)
NrcdSrri)rrrrsem_resultssrrz7BaseSemaphoreTests.test_acquire_contended.<locals>.funcses{{}}---OOI&&&s{{}}---OOI&&&&&rctjtjD](}ttz|krdS)dSrrr!r"r,countr%rrs  r
wait_countz=BaseSemaphoreTests.test_acquire_contended.<locals>.wait_countR+G,ABB

x==3x==0E99EE:

r
rmrFT)rr[rrNr+rasortedrn)r	sem_valuerr#rwrrrcount3count4rrrrrs          @@@@@rryz)BaseSemaphoreTests.test_acquire_contendeds	ll9%%


		'	'	'	'	'	'	'	'	'						


4^^		]FJvX01#,???I9%%





FJv'''VHx$788S6\QC&L8
:
:
:I!mF6]]





Jv/000VHx$788S6\QC&L8A3<G
I
I
I
S[[//000FKKMMM9															<	
6F?V#;f#DE	G	G	G	G	GsEF11F58F5c*	
d}||

gg	d	
fd}	fd}t|d5|dz
}|||	zdg|zd|}
||||z|t	zdg|zdg|zzd|dz
}
||||z|z|t	zdg|zdg|zzdg|zz|
d
ddddS#1swxYwYdS)	NrrcdSrr)rrrrsrrz2BaseSemaphoreTests.test_multirelease.<locals>.funcEsGKKMMMOOI&&&KKMMMOOI&&&&&rctjtjD](}ttz|krdS)dSrr r!s  rr#z8BaseSemaphoreTests.test_multirelease.<locals>.wait_countLr$rr%rmrF)rr[rrNrar&rn)rr'rr#rrr(rrrrs       @@@@rtest_multireleasez$BaseSemaphoreTests.test_multirelease=sN	ll9%%


		'	'	'	'	'	'	'	'						
4__		]FJvX01#,???IFKKJv'''VHx$788S6\QC&L8
:
:
:I]FKKJv/000VHx$788S6\QC&L8A3<G
I
I
I
S[[//000
KKMMM3																		sD'FFFc|d}||d||d||d|||ddS)NrF)rrer[rnrars  rrfz#BaseSemaphoreTests.test_try_acquirelsll1ooE**+++E**+++U++,,,


E**+++++rc|dgfd}t|d5	dddn#1swxYwY|t	dgdzdgdzzdS)NrcdddSrdri)rrsrrlz8BaseSemaphoreTests.test_try_acquire_contended.<locals>.fxsENN3;;u--...NN3;;u--.....rrvFrTr)rr[rrNr&)rrlrrs  @@rrpz-BaseSemaphoreTests.test_try_acquire_contendedtsll1oo


	/	/	/	/	/	/1a[[																	
	
5'A+!*CEEEEEsAAAc|d}|t|jdd||d||d||d|||dtj}||dtj|z
}|	|ddS)NrFg?rg{Gzt?r)
rrrr[rernrar	rrJ)rrtrs    rtest_acquire_timeoutz'BaseSemaphoreTests.test_acquire_timeoutsll1oo*ck5#FFFE22333E22333U33444


E22333NS11222
^


!2s#####rc.|fd}t|d5}td||jddddS#1swxYwYdS)NcXdSrrs)rsrrlz0BaseSemaphoreTests.test_default_value.<locals>.fs!KKMMMKKMMMMMrrm)rr[rr
rnrra)rrlrxrs   @rtest_default_valuez%BaseSemaphoreTests.test_default_valuesllnn


					1a[[	E ###U^,,,
KKMMM
																		s>B

BBcddfd	}|dt
|t
ddS)NrcD5d5d|r|	dddn#1swxYwYddddS#1swxYwYdSrd)rer[rarn)r}rrs r_withz+BaseSemaphoreTests.test_with.<locals>._withs%
"
"E 2 2333


""$$S[[%7%7888"!	""""""""""""""""
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"
"s5?B-A=1B=B	BB	BBBFr)rrer[rarr)rr9rs` @rrzBaseSemaphoreTests.test_withsll1oo	"	"	"	"	"	"	"	E**+++


)UI666E**+++




rN)r7r8r9r:rUrr^ryr-rfrpr3r6rr(rrrrsJJJ
6G6G6Gp---^,,,FFF$$$ rrceZdZdZdZdZdS)SemaphoreTestsz)
    Tests for unbounded semaphores.
    c|d}||||dSNrm)rrar[rs  rrz&SemaphoreTests.test_release_unacquiredsIll1oo













rcz|d}|t|d||t|d|||t|ddS)Nrz<\w+\.Semaphore at .*: value=3>z<\w+\.Semaphore at .*: value=2>z<\w+\.Semaphore at .*: value=4>)rrWrXr[rars  rrYzSemaphoreTests.test_reprsll1ooc$FGGG


c$FGGG





c$FGGGGGrNr7r8r9r:rrYr(rrr;r;sAHHHHHrr;ceZdZdZdZdZdS)BoundedSemaphoreTestsz'
    Tests for bounded semaphores.
    c|}|t|j|||t|jdSr)rrrrar[rs  rrz-BoundedSemaphoreTests.test_release_unacquireds_llnn*ck222





*ck22222rc|d}|t|d||t|ddS)Nrz(<\w+\.BoundedSemaphore at .*: value=3/3>z(<\w+\.BoundedSemaphore at .*: value=2/3>)rrWrXr[rs  rrYzBoundedSemaphoreTests.test_reprs^ll1ooc$OPPP


c$OPPPPPrNr?r(rrrArAsA333QQQQQrrAcveZdZdZdZdZdZdZdZdZ	dd	Z
d
ZdZdZ
d
ZdZdZdZdZdZdZdS)BarrierTestsz$
    Tests for Barrier objects.
    rvg@cR||j|j|_dS)Nr)barriertyperwdefaultTimeoutbarrierr5s rr@zBarrierTests.setUps%''8K'LLrc8|jdSr)rIabortr5s rrDzBarrierTests.tearDownsrcdt||j5	ddddS#1swxYwYdSr)rrwrrls  rrun_threadszBarrierTests.run_threadss{
1df

																				s%))c||jj}|||jt	|D]}|dd|t
|d||z|j|dd|t
|d|dz|z|j||jjd|	|jj
dS)NrTrm)rIpartiesrNrwr+rr,r	n_waitingrnbroken)rrnmrs     r	multipasszBarrierTests.multipasssL DF###q	 	 AAJd###S__a!e444LAJd###S__q1uk:::L/333,-----rrmcLgggfd}|dS)z;
        Test that a barrier is passed in lockstep
        c4dSr)rU)passesrrsrrlz$BarrierTests.test_barrier.<locals>.fsNN7F+++++rNrN)rrXrlrs`` @rtest_barrierzBarrierTests.test_barriersMb'	,	,	,	,	,	,	,rc,|dS)zC
        Test that a barrier works for 10 consecutive runs
        r%)rZr5s rtest_barrier_10zBarrierTests.test_barrier_10s  $$$rcgfd}|tttjdS)z9
        test the return value from barrier.wait
        cdj}|dSr)rIrr)rrrs rrlz(BarrierTests.test_wait_return.<locals>.f
s.!!##ANN1rN)rNrNsumr+rw)rrlrs` @rtest_wait_returnzBarrierTests.test_wait_returnsq							
Ws5=='9'9:::::rcgfd}j|fd}|dS)z,
        Test the 'action' callback
        c2ddSr4)r)rsractionz(BarrierTests.test_action.<locals>.actionsNN4     rcvtddSr=)rrNr,)rIrrsrrlz#BarrierTests.test_action.<locals>.fs2LLNNNS\\1-----rN)rGrwrN)rrcrlrIrs`  @@rtest_actionzBarrierTests.test_actions{	!	!	!	!	!""46622	.	.	.	.	.	.	.	
rc&ggfd}|tdtjdz
jjdS)zK
        Test that an abort will put the barrier in a broken state
        cb	j}|jdzkrtjddS#t
j$rdYdSt$rjYdSwxYwNrT)rIrrwrrrBrokenBarrierErrorrK)rrrrs rrlz"BarrierTests.test_abort.<locals>.f(s

L%%''	>>&&!!###%%%%%/
&
&
&%%%%%%


""$$$
sAA!!$B."B.-B.rrmN)rNrNr,rwrerIrR)rrlrrs` @@r
test_abortzBarrierTests.test_abort"s								
X***Xq111+,,,,,rc@gggfd}|tdtjdz
tjdS)zL
        Test that a 'reset' on a barrier frees the waiting threads
        cj}|jdzkrUtjtjD]}jjjdz
krnjnZ	jdn*#tj
$rdYnwxYwjddS)NrrmT)rIrrwrr!r"rQresetrrri)rr%rrresults3rs  rrlz"BarrierTests.test_reset.<locals>.fAs!!##ADFAI~~ /0EFFA|-$&1*==>""$$$$*L%%'''OOD)))) 3***OOD)))))*
LOOD!!!!!s?.B..$CCrrmN)rNrNr,rw)rrlrrrns` @@@r
test_resetzBarrierTests.test_reset:s	"	"	"	"	"	"	"	"$	
X***Xq111X/////rcxgggjfd}|t	dt	jdz
t	jdS)zF
        Test that a barrier can be reset after being broken.
        cV	j}|jdzkrtjdnN#t
j$rdYn(t$rjYnwxYwjdzkrjjddSrh)	rIrrwrrrrirKrm)rbarrier2rrrnrs rrlz,BarrierTests.test_abort_and_reset.<locals>.fas"

L%%''	>>&&!!###%%%%/
&
&
&%%%%%


""$$$
}}$&!)++""$$$MMOOOLOOD!!!!!sAA  $B+"B+*B+rrmN)rGrwrNrNr,)rrlrrrrrns` @@@@rtest_abort_and_resetz!BarrierTests.test_abort_and_resetYs##DF++	"	"	"	"	"	"	"	"	"*	
X***Xq111X/////rc<fd}|dS)z$
        Test wait(timeout)
        cj}|jdzkrtjjdztjjjjdzdS)Nrr)	rIrrwr	r
rHrrri)rrs rrlz$BarrierTests.test_timeout.<locals>.fs}!!##ADFaK
4.2333i:"l/1Dq1H
J
J
J
J
JrNrYrMs` rrzBarrierTests.test_timeout{s=	J	J	J	J	J	
rcd}d|fd}tj}t|d5	dddn#1swxYwYtj|z
}||dS)z4
        Test the barrier's default timeout
        rrrcRtjjdSr)rrrir)rIrsrrlz,BarrierTests.test_default_timeout.<locals>.fs/i:%l
,
,
,
,
,rrmN)rGr	rrrF)rrrl
start_timerrIs`    @rtest_default_timeoutz!BarrierTests.test_default_timeouts""1g"66	,	,	,	,	,	,^%%

1a[[																	
^



*G,,,,,sAAAc|d}||dSr=)rGr)rbs  rtest_single_threadzBarrierTests.test_single_threads3Q		rcr|dtj|t	dfd}d}t||5tjtjD]}j|krn|t	d	dddn#1swxYwY|t	d
|t	ddS)Nrz!<\w+\.Barrier at .*: waiters=0/3>c2dSr)r)rIrsrrlz!BarrierTests.test_repr.<locals>.fsLL!!!!!rrz!<\w+\.Barrier at .*: waiters=2/3>z<\w+\.Barrier at .*: broken>)rGrrrWrXrr!r"rQrrK)rrlrwr%rIrs    @@rrYzBarrierTests.test_reprs""1%%&g(LMMM	"	"	"	"	"	"

1a[[		"		"+G,ABB

$))E*T']]A
C
C
C
LL!!!		"		"		"		"		"		"		"		"		"		"		"		"		"		"		"	
g=	?	?	?	

g8	:	:	:	:	:sA'CCCN)rm)r7r8r9r:rwrHr@rDrNrUrZr\r`rerjrorsrryr|rYr(rrrErEs	
ANMMM...%%%
;
;
;---0000> 0 0 0D--- 
:::::rrE) r:osrrr	_threadrrrunittestrtestrtest.supportr
skipUnlesshas_fork_supportrr
objectrTestCaser<rLrrrrrr;rArEr(rr<module>rs
							



11111111))))))$#G$<%CDD
   @@@@@F@@@F111118$111"V!V!V!V!V!LV!V!V!r?????
???Dd+d+d+d+d+d+d+d+Nm@m@m@m@m@m@m@m@`G*G*G*G*G*\G*G*G*TAAAAAAAAFHHHHH'HHH.QQQQQ.QQQ(\:\:\:\:\:<\:\:\:\:\:r