python (3.12.0)

(root)/
lib/
python3.12/
test/
__pycache__/
lock_tests.cpython-312.opt-1.pyc

͑e}dZddlZddlZddlZddlmZmZddlZddlZddl	Z	ddl
mZddlm
Z
ejejdZdZGdd	eZGd
dej(ZGdd
eZGddeZGddeZGddeZGddeZGddeZGddeZGddeZGddeZy)z/
Various tests for synchronization primitives.
N)start_new_threadTIMEOUT_MAX)support)threading_helperz9platform doesn't support fork (no _at_fork_reinit method)c.tjdy)N{Gz?)timesleepC/BuggyBox/python/3.12.0/bootstrap/lib/python3.12/test/lock_tests.py_waitrsJJtrc*eZdZdZddZdZdZdZy)Bunchz
    A bunch of threads.
    c_|_g_g_|_tj_jjfd}	t|D]}t|dy#d_xYw)z
        Construct a bunch of `n` threads running the same function `f`.
        If `wait_before_exit` is True, the threads won't terminate until
        do_finish() is called.
        cztj}jj|	jj|j
st
j
syy#jj|j
st
j
swwxYwN)	threading	get_identstartedappendfinished	_can_exitr)tidfselfs r
taskzBunch.__init__.<locals>.task,s%%'CLL$


$$S)..G..

$$S)..G..sA99>B:8B:rTN)rnrrrrwait_threads_exitwait_thread	__enter__ranger)rrrwait_before_exitris``    r
__init__zBunch.__init__s
--+==?""$		1X
+ r*
+	!DNs!A>>
Bct|j|jkr.tt|j|jkr-yyr)lenrrrrs r
wait_for_startedzBunch.wait_for_started=s3$,,$&&(G$,,$&&(rct|j|jkr-tt|j|jkr-|jjdddyr)r'rrrr __exit__r(s r
wait_for_finishedzBunch.wait_for_finishedAsM$-- 466)G$-- 466)	
!!$d3rcd|_yNT)rr(s r
	do_finishzBunch.do_finishGs	rN)F)__name__
__module____qualname____doc__r%r)r,r/rrr
rrs>4rrceZdZdZdZdZy)BaseTestCasec6tj|_yr)rthreading_setup_threadsr(s r
setUpzBaseTestCase.setUpLs(88:
rcdtj|jtjyr)rthreading_cleanupr8r
reap_childrenr(s r
tearDownzBaseTestCase.tearDownOs **DMM:rcX|j||dz|j||dzy)Ng333333?g$@)assertGreaterEqual
assertLess)ractualexpecteds   r

assertTimeoutzBaseTestCase.assertTimeoutSs*	
3740rN)r0r1r2r9r=rCrrr
r5r5Ks; 1rr5c^eZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZy)
BaseLockTestsz;
    Tests for both recursive and non-recursive locks.
    c&|j}~yr)locktyperlocks  r
test_constructorzBaseLockTests.test_constructoras}}rc\|j}|jt|d~y)Nz<unlocked .* object (.*)?at .*>)rGassertRegexreprrHs  r
	test_reprzBaseLockTests.test_repres%}}d%FGrc||j}|j|jt|d~y)Nz<locked .* object (.*)?at .*>)rGacquirerLrMrHs  r
test_locked_reprzBaseLockTests.test_locked_reprjs.}}d%DErcF|j}|j~yr)rGrPrHs  r
test_acquire_destroyz"BaseLockTests.test_acquire_destroyps}}rcf|j}|j|j~yrrGrPreleaserHs  r
test_acquire_releasez"BaseLockTests.test_acquire_releaseus"}}rc|j}|j|jd|jyNF)rG
assertTruerPrVrHs  r
test_try_acquirezBaseLockTests.test_try_acquire{s+}}U+,rc|jjgfd}t|dj|j	djy)NcFjjdyrYrrPrIresultsr
rz3BaseLockTests.test_try_acquire_contended.<locals>.fsMM$,,u-.rr)rGrPrr,assertFalserVrrrIr`s  @@r
test_try_acquire_contendedz(BaseLockTests.test_try_acquire_contendedsN}}	/
a%%'#rct|jjd}fd}t||}|jt	|jt
|jdj|j|jt
|j|y)NcFjjyrrPrVrIsr
rz/BaseLockTests.test_acquire_contended.<locals>.fLLNLLNrr)
rGrPrr)rassertEqualr'rrVr,)rNrbrIs    @r
test_acquire_contendedz$BaseLockTests.test_acquire_contendeds}}
	
!QK	
QZZ!,	QZZ!,rc|jfd}dfd	}|t|dj|jt|tt|djy)NcFjjyrrhrisr
rz"BaseLockTests.test_with.<locals>.frjrc>5||	dddy#1swYyxYwrr)errrIs r
_withz&BaseLockTests.test_with.<locals>._withs*
?I#


srar)rGrr,assertRaises	TypeError)rrrsrIs   @r
	test_withzBaseLockTests.test_withsU}}			
a%%')UI6
a%%'rcd|jfd}ttj}t	|djttj|k7rCt
jd|j|ttjyy)NcFjjyrrhrisr
rz)BaseLockTests.test_thread_leak.<locals>.frjrg?)	rGr'r	enumeraterr,r	r
rk)rrrrIs   @r
test_thread_leakzBaseLockTests.test_thread_leaks}}	
	##%&	a&&(y""$%*

JJsOQI$7$7$9 :;
+rc|j|jtjdd|jtjd|jtjd|jtjt
dzjt
j
tj}|jjdtj}|j||z
dgfd}t|dj|jd|jdd	y)
NFraitimeoutg}Ô%ITrfctj}jjdtj}j||z
y)N?r})r		monotonicrrP)t1t2rIresultss  r
rz%BaseLockTests.test_timeout.<locals>.fsB!BNN4<<<45!BNN27#rrr)rGrt
ValueErrorrP
OverflowErrorrrVr	rrZr@rr,rbrC)rrrrrIrs    @@r
test_timeoutzBaseLockTests.test_timeouts}}*dllE1=*dllDA-uE-{QO[)
^^
Q/0
^^
R#	$
	a%%'$71:s+rcz|j}tj|}|j|yr)rGweakrefrefassertIsNotNonerrIrs   r
test_weakref_existsz!BaseLockTests.test_weakref_existss+}}kk$SU#rc|j}tj|}~tj|j|yr)rGrrgccollectassertIsNoners   r
test_weakref_deletedz"BaseLockTests.test_weakref_deleteds7}}kk$


#% rN)r0r1r2r3rJrNrQrSrWr[rdrnrvr{rrrrrr
rErE\sH


- ( <&,4$
!rrEc2eZdZdZdZdZdZedZy)	LockTestszn
    Tests for non-recursive, weak locks
    (which can be acquired and released from different threads).
    c|jgfd}tj5t|dt	dk(rtt	dk(rt|j
t	djt	dk(rtt	dk(r|j
t	ddddy#1swYyxYw)NcjjdjjdyrrPr)rIphasesr
rz#LockTests.test_reacquire.<locals>.fs-LLNLLLLNLLrrrra)rGrrrr'rrkrV)rrrIrs  @@r
test_reacquirezLockTests.test_reacquires}}	
/
/
1		,Q#e*/e*/GSZ+LLNe*/e*/SZ+		,		,		,s3C##AC#?C##C,c|jjfd}t|d}|jjj	y)Nc&jyr)rVrisr
rz*LockTests.test_different_thread.<locals>.fLLNrra)rGrPrr,rVrrrmrIs   @r
test_different_threadzLockTests.test_different_threadsE}}	!QK	rc&|j}|j|j|jd|j|j|j	|j|jdy)Nrr}F)blocking)rGrPrbrVlockedrZrHs  r
test_state_after_timeoutz"LockTests.test_state_after_timeout
se}}d34'e45rcd}|j}|j|||j}|j|j||y)NcD|j|jyrrhris r
use_lockz/LockTests.test_at_fork_reinit.<locals>.use_locks
LLNLLNr)rG_at_fork_reinitrP)rrrIlock2s    r
test_at_fork_reinitzLockTests.test_at_fork_reinitsP	}}





rN)	r0r1r2r3rrr
requires_forkrrrr
rrs*,,	6rrc.eZdZdZdZdZdZdZdZy)
RLockTestsz$
    Tests for recursive locks.
    c|j}|j|j|j|j|j|jyrrUrHs  r
rzRLockTests.test_reacquire,sC}}rcd|j}|jt|j|j	|j	|j|j	|j|j|jt|jyr)rGrtRuntimeErrorrVrPrHs  r
test_release_unacquiredz"RLockTests.test_release_unacquired5sk}},5,5rcd|j}|jt|j|j	|j	|j|j	|j|j|jt|jyr)rGrtr
_release_saverPrVrHs  r
test_release_save_unacquiredz'RLockTests.test_release_save_unacquiredAso}},(:(:;,(:(:;rc|jfd}t|dd}	|jtj|j|j
y#|jwxYw)Nc&jyr)rPrisr
rz+RLockTests.test_different_thread.<locals>.fPrrraT)rGrrtrrVr/r,rs   @r
rz RLockTests.test_different_threadMs\}}	!Q	lDLL9
KKM	
KKMs A&&A8cJ|j|jjj|j	jj|j	jgfd}t|dj
|jdj|j	jj|jjy)NcDjjyr)r	_is_ownedr_sr
rz$RLockTests.test__is_owned.<locals>.fasMM$..*+rrar)rGrbrrPrZrr,rVrcs  @@r
test__is_ownedzRLockTests.test__is_ownedYs}})*()()	,
a%%'#())*rN)	r0r1r2r3rrrrrrrr
rr(s 
6
<
+rrcDeZdZdZdZdZdZdZdZe	dZ
dZy	)

EventTestsz"
    Tests for Event objects.
    c|j}|j|j|j|j	|j|j|j	|j|j|j|j|j|j|jyr)	eventtyperbis_setsetrZclearrevts  r
test_is_setzEventTests.test_is_setpsnn&	

%	

%		&		&rc>d}ggfd}t||}|jt|jt	dj|j
|jdg|z|jdg|zy)Nrfcjjjjyrrwait)rresults1results2sr
rz#EventTests._check_notify.<locals>.fs'OOCHHJ'OOCHHJ'rrT)rr)rrkr'rr,)rrrlrrmrrs `   @@r

_check_notifyzEventTests._check_notify|s
	(
!QK	
X*		D6A:.D6A:.rc|j}|j||j|j|j|yr)rrrrrs  r
test_notifyzEventTests.test_notifys<nn3			3rc|jggd}fd}t||j|jdg|zD](\}}|j	||j|d*ggj
t||j|jdg|zD]\}}|j|y)Nrfcjjdtj}jd}tj}j|||z
fy)Ngr)rrr	r)rrrrrrs   r
rz"EventTests.test_timeout.<locals>.fsPOOCHHSM*!B
A!BOOQRL)rFrT)rrr,rkrbrCrrZ)rrlrrdtrrrs     @@@r
rzEventTests.test_timeoutsnn
	*	a%%'E7Q;/	(EArQr3'	(	
a%%'D6A:.	EArOOA	rc2|jgdd}fd}t||}|jtjjj
|j|jdg|zy)Ng?rfcLjjdzyNr)rrr~sr
rz(EventTests.test_set_and_clear.<locals>.fsNN388GaK01rT)	rrr)r	r
rrr,rk)rrlrrmrrr~s    @@@r
test_set_and_clearzEventTests.test_set_and_clears|nn
	2!QK	

7				4&1*-rcp|j}|j5|j|jjdddd|j	|j5|j|jjddddy#1swYYxYw#1swYyxYwrY)r_condrbrPrrs  r
rzEventTests.test_at_fork_reinitsnn
YY	7SYY..u56	7
YY	7SYY..u56	7	7	7	7	7	7s+B ,+B, B),B5c|j}|jt|d|j|jt|dy)Nz<\w+\.Event at .*: unset>z<\w+\.Event at .*: set>)rrLrMrrs  r
rNzEventTests.test_reprsAnnc$@A	c$>?rN)r0r1r2r3rrrrrrrrNrrr
rrks:
'/" 2."77@rrc@eZdZdZdZdZdZdZdZdZ	dZ
d	Zy
)ConditionTestsz(
    Tests for condition variables.
    c||j}|j|j|j|jtj}|j|}|j|j|jd|j|j
|jd|j|jd|j|5|j|jddddy#1swYyxYwrY)condtyperPrVrLockrbrZ)rcondrIs   r
test_acquirezConditionTests.test_acquires}}	
~~}}T"e,-U+,e,-
	2T\\%01	2	2	2s!D22D;cd|j}|jt|jyr)rrtrrrrs  r
test_unacquired_waitz#ConditionTests.test_unacquired_waits!}},		2rcd|j}|jt|jyr)rrtrnotifyrs  r
test_unacquired_notifyz%ConditionTests.test_unacquired_notifys!}},4rcjd}gggdfd}t||}|jtdkrttdkrj	|jgj
jdtdjtdkrttdkr|jdgdz|jgtdkrttdkrj
jdtdjttzdkr%tttzdkr%|jdgdzd	gdzz|jd	gdztdkrttdkrj
jtdjtdkrttdkr|jdgdzd	gdzz|jd	gdzd
gdzz|jy)NrfrcVjjj}jj|fjjj}jj|fyr)rPrrrV)r`r	phase_numreadyrrs r
rz'ConditionTests._check_notify.<locals>.fswLLNLL#YY[FLLNOOVY/0LLNLL#YY[FLLNOOVY/0rra)Trar)Tr)Tr)rr)r'rrrkrPrrV
notify_allr,)	rrrlrrmrrrrs	 `   @@@@r
rzConditionTests._check_notifysE
	
	1
	1
!QK	%j1nG%j1n

2&A
	(maG(maI;?32&%j1nG%j1n	
A
	(mc(m+a/G(mc(m+a/I;?i[1_#DEI;?3%j1nG%j1n	

	(maG(maI;?hZ!^#CDI;?i[1_#DE	rch|j}|j||j|yr)rrrs  r
rzConditionTests.test_notify:s)}}4 4 rc|jgd}fd}t||j|jt	|D](\}}|j|d|j
|*y)Nrfcjtj}jd}tj}j	j||z
|fy)Nr)rPr	rrrVr)rr`rrrs   r
rz&ConditionTests.test_timeout.<locals>.fDsOLLN!BYYs^F!BLLNNNBGV,-rr)rrr,rkr'rCrb)rrlrrr`rrs     @@r
rzConditionTests.test_timeout@sx}}
	.	a%%'Wq)!	%JBr3'
V$	%rc6jdfd}t|d}|jtdD]7}t	j
d5dz
j
ddd9|jy#1swYTxYw)Nrc5jfd}j|jddddy#1swYyxYw)Ncdk(Srrstatesr
<lambda>z8ConditionTests.test_waitfor.<locals>.f.<locals>.<lambda>[qrr)wait_forrZrk)r`rrrs r
rz&ConditionTests.test_waitfor.<locals>.fYsF
+'89'  *
+
+
+s8AArarr)rrr)r"r	r
rr,)rrrmr$rrs`   @@r
test_waitforzConditionTests.test_waitforVs}}	+

!QK	q	AJJt




	
	


sBB	ctjdgfd}t|d}|jtdD]7}t	j
d5dz
j
ddd9|jjtdy#1swYoxYw)Nrc5tj}jfdd}tj|z
}j|j	|djddddy#1swYyxYw)Ncdk(Srrrsr
rz@ConditionTests.test_waitfor_timeout.<locals>.f.<locals>.<lambda>nrrg?r})r	rrrbrCr)rr`rrrsuccesss  r
rz.ConditionTests.test_waitfor_timeout.<locals>.fksu
%^^%'8#F^^%*  (""2s+t$

%
%
%sA6BBrarr)
rrr)r"r	r
rr,rkr')rrrmr$rrrs`   @@@r
test_waitfor_timeoutz#ConditionTests.test_waitfor_timeoutgs}}	%
!QK	q	AJJt




	
	
Wq)	

s"B..B7	N)r0r1r2r3rrrrrrrrrrr
rrs12&35HT!%,"*rrcLeZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
y)
BaseSemaphoreTestszB
    Common tests for {bounded, unbounded} semaphore objects.
    c|jt|jd|jt|jtjy)N)value)rtrsemtypesysmaxsizer(s r
rJz#BaseSemaphoreTests.test_constructors:*dllB?*dllS[[LIrc|jd}|j|j|jd}|j|j|j|jy)Nrar)rrPrVrsems  r
rzBaseSemaphoreTests.test_acquiresRll1o

ll1o



rcF|j}|j~yr)rrPrs  r
rSz'BaseSemaphoreTests.test_acquire_destroyslln
rc@	|jdjd}g	ggd	fd}t|d}|jt	t	zdkr%tt	t	zdkr%|j
zdgdzdtdD]}jt	t	zdkr%tt	t	zdkr%|j
tzdgdzdgdzzdtdD]}jt	t	zd	kr%tt	t	zd	kr%|j
tzdgdzdgdzzdgdzz|jjd
j|j|j
	dgdzy)
N
rcjjjjjjyrr^)rrrrsem_resultssr
rz4BaseSemaphoreTests.test_acquire_contended.<locals>.fsCs{{}-OOI&s{{}-OOI&rra
rFT)rrPrr)r'rrkr"rVsortedrbr,)
rrlrrmr$rrrrrs
     @@@@@r
rnz)BaseSemaphoreTests.test_acquire_contendedsll1o
		'	'

!RL	(mc(m+a/G(mc(m+a/H,qcAg6	q	AKKM	(mc(m+b0G(mc(m+b08 34qcAga6GH	q	AKKM	(mc(m+b0G(mc(m+b08 34qcAga6G1#PQ'6QRU+,
	tf
&>?rc|jdjggdfd}t|d}|jt	t	zdkr%tt	t	zdkr%|j
zdgdzdjdt	t	zdkr%tt	t	zdkr%|j
tzdgdzdgdzzdjdt	t	zd	kr%tt	t	zd	kr%|j
tzdgdzdgdzzdgdzz|jjd
j|jy)Nrrcjjjjyrr)rrrrsr
rz/BaseSemaphoreTests.test_multirelease.<locals>.fs-KKMOOI&KKMOOI&rrrrarrrF)rrPrr)r'rrkrVrrbr,)rrrmrrrrs   @@@@r
test_multireleasez$BaseSemaphoreTests.test_multireleasesll1o
		'

!RL	(mc(m+a/G(mc(m+a/H,qcAg6	A(mc(m+b0G(mc(m+b08 34qcAga6GH	A(mc(m+b0G(mc(m+b08 34qcAga6G1#PQ'6QRU+,
	rcF|jd}|j|jd|j|jd|j|jd|j	|j|jdy)NrF)rrZrPrbrVrs  r
r[z#BaseSemaphoreTests.test_try_acquiresnll1oE*+E*+U+,
E*+rc|jdjgfd}t|dj|j	tdgdzdgdzzy)NrcjjdjjdyrYr^)rrsr
rz8BaseSemaphoreTests.test_try_acquire_contended.<locals>.fs-NN3;;u-.NN3;;u-.rrfFrTr)rrPrr,rkr)rrrrs  @@r
rdz-BaseSemaphoreTests.test_try_acquire_contendeds^ll1o
	/	a%%'	
5'A+!*CErcP|jd}|jt|jdd|j	|jd|j	|jd|j|jd|j
|j	|jdtj}|j|jdtj|z
}|j|dy)NrF?r}g{Gzt?r)
rrtrrPrZrbrVr	rrC)rrtrs    r
test_acquire_timeoutz'BaseSemaphoreTests.test_acquire_timeoutsll1o*ckk5#FE23E23U34
E23NNS12
^^

!2s#rc|jjfd}t|d}|jt	|j|jj|jy)NcFjjyrrh)rsr
rz0BaseSemaphoreTests.test_default_value.<locals>.fsKKMKKMrra)	rrPrr)rrbrrVr,)rrrmrs   @r
test_default_valuez%BaseSemaphoreTests.test_default_valuesalln
	
!QK	
$
	rc<jddfd	}|jjdjj	t
|t
jjdjy)Nrc5jjdj5jjd|r|	ddddddy#1swYxYw#1swYyxYwrY)rZrPrVrb)rrrrs r
rsz+BaseSemaphoreTests.test_with.<locals>._withsz
"E 23
"$$S[[%78!	"
"
"""
"
"s"3A:%A.A:.A7	3A::BFr)rrZrPrVrtru)rrsrs` @r
rvzBaseSemaphoreTests.test_withsjll1o	"	E*+
)UI6E*+
rN)r0r1r2r3rJrrSrnrr[rdrr rvrrr
rrs>J
#@J@,F$rrceZdZdZdZdZy)SemaphoreTestsz)
    Tests for unbounded semaphores.
    c|jd}|j|j|j|jyNra)rrVrPrs  r
rz&SemaphoreTests.test_release_unacquired"s3ll1o



rc(|jd}|jt|d|j|jt|d|j	|j	|jt|dy)Nrz<\w+\.Semaphore at .*: value=3>z<\w+\.Semaphore at .*: value=2>z<\w+\.Semaphore at .*: value=4>)rrLrMrPrVrs  r
rNzSemaphoreTests.test_repr*sill1oc$FG
c$FG

c$FGrNr0r1r2r3rrNrrr
r$r$sHrr$ceZdZdZdZdZy)BoundedSemaphoreTestsz'
    Tests for bounded semaphores.
    c|j}|jt|j|j	|j|jt|jyr)rrtrrVrPrs  r
rz-BoundedSemaphoreTests.test_release_unacquired9sGlln*ckk2

*ckk2rc|jd}|jt|d|j|jt|dy)Nrz(<\w+\.BoundedSemaphore at .*: value=3/3>z(<\w+\.BoundedSemaphore at .*: value=2/3>)rrLrMrPrs  r
rNzBoundedSemaphoreTests.test_reprAsBll1oc$OP
c$OPrNr(rrr
r*r*4s3Qrr*cteZdZdZdZdZdZdZdZdZ	ddZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZy)BarrierTestsz$
    Tests for Barrier objects.
    rfg@c\|j|j|j|_y)Nr})barriertyperldefaultTimeoutbarrierr(s r
r9zBarrierTests.setUpOs#''8K8K'Lrc8|jjyr)r2abortr(s r
r=zBarrierTests.tearDownQsrcdt||jdz
}||jyr&)rrlr,)rrrms   r
run_threadszBarrierTests.run_threadsTs'!TVVAX		rc`|jj}|j||jt	|D]}|djd|jt
|d||z|jj|djd|jt
|d|dz|z|jj|j|jjd|j|jjy)NrTra)r2partiesrkrlr"rr'r	n_waitingrbbroken)rrrmr$s     r
	multipasszBarrierTests.multipassYsLL  DFF#q	 AAJd#S_a!e4LLAJd#S_q1uk:LL
	 	
//3,,-rcBgggfd}j|y)z;
        Test that a barrier is passed in lockstep
        c*jyr)r<)passesrrsr
rz$BarrierTests.test_barrier.<locals>.fksNN7F+rNr6)rr?rrs`` @r
test_barrierzBarrierTests.test_barrierfs!b'	,rc$|jdS)zC
        Test that a barrier works for 10 consecutive runs
        r)rAr(s r
test_barrier_10zBarrierTests.test_barrier_10os  $$rcgfd}j|jtttjy)z9
        test the return value from barrier.wait
        c\jj}j|yr)r2rr)rrrs r
rz(BarrierTests.test_wait_return.<locals>.fzs!!!#ANN1rN)r6rksumr"rl)rrrs` @r
test_wait_returnzBarrierTests.test_wait_returnus@		
Ws5='9:rcgfd}jj|fd}j|y)z,
        Test the 'action' callback
        c(jdyr.)r)rsr
actionz(BarrierTests.test_action.<locals>.actionsNN4 rc\jjtdyr&)rrkr')r2rrsr
rz#BarrierTests.test_action.<locals>.fs LLNS\1-rNr0rlr6)rrJrr2rs`  @@r
test_actionzBarrierTests.test_actions:	!""46662	.	
rcggfd}j|jtdjtjdz
j	j
jy)zK
        Test that an abort will put the barrier in a broken state
        c^	jj}|jdzk(rtjjj	dy#t
j$rj	dYyt$rjjYywxYwNrT)r2rrlrrrBrokenBarrierErrorr4)r$rrrs r
rz"BarrierTests.test_abort.<locals>.fs

LL%%'	>&&!!#%//
&%
""$
sAA!!$B,"B,+B,rraN)r6rkr'rlrZr2r:)rrrrs` @@r

test_abortzBarrierTests.test_abortsj		
X*Xq1++,rcgggfd}j|jtdjtjdz
jtjy)zL
        Test that a 'reset' on a barrier frees the waiting threads
        cZjj}|jdzk(r}jjjdz
kr<t	j
djjjdz
kr<jj
n,	jjjdjjjdy#tj$rjdYRwxYw)NrragMbP?T)
r2rrlr9r	r
resetrrrQ)r$rrresults3rs r
rz"BarrierTests.test_reset.<locals>.fs!!#ADFFAI~ll,,tvvax7JJu%ll,,tvvax7""$*LL%%'OOD)
LLOOD!	!33*OOD)*s,+D$D*)D*rraN)r6rkr'rl)rrrrrVs` @@@r

test_resetzBarrierTests.test_resetsq	""	
X*Xq1X/rcTgggjjfd}j|jt	djt	jdz
jt	jy)zF
        Test that a barrier can be reset after being broken.
        cH	jj}|jdzk(rtjjj	djjdzk(rjjjjjj	dy#t
j$rj	dYt$rjjYwxYwrP)	r2rrlrrrrQr4rU)r$barrier2rrrVrs r
rz,BarrierTests.test_abort_and_reset.<locals>.fs

LL%%'	>&&!!#%}}$&&!)+""$MMOLLOOD!//
&%
""$
sAC$D!<"D! D!rraN)r0rlr6rkr')rrrZrrrVs` @@@@r
test_abort_and_resetz!BarrierTests.test_abort_and_resets##DFF+	"	"*	
X*Xq1X/rc2fd}j|y)z$
        Test wait(timeout)
        cjj}|jdzk(rtjdjtjjjdy)Nrrr)r2rrlr	r
rtrrQ)r$rs r
rz$BarrierTests.test_timeout.<locals>.fsU!!#ADFFaK

3i::"ll//
6rNr@)rrs` r
rzBarrierTests.test_timeouts	6	
rcpjjdfd}j|y)z4
        Test the barrier's default timeout
        g333333?r}cj}|jdzk(rtjdj	t
jjy)Nrr)rrlr	r
rtrrQ)r$r2rs r
rz,BarrierTests.test_default_timeout.<locals>.fsCADFFaK

3i::GLLIrNrL)rrr2s` @r
test_default_timeoutz!BarrierTests.test_default_timeouts4
""4663"7	J	
rcf|jd}|j|jyr&)r0r)rrms  r
test_single_threadzBarrierTests.test_single_threads$Q		rc|jd|jtdfd}t|d}|j	tjd|jtdjd|j|jtdj|jtdy)Nrz!<\w+\.Barrier at .*: waiters=0/3>c(jdy)Nr)r)rmsr
rz!BarrierTests.test_repr.<locals>.fs
FF1Irrg?z!<\w+\.Barrier at .*: waiters=2/3>z<\w+\.Barrier at .*: broken>)
r0rLrMrr)r	r
rr,r4)rrbunchrms   @r
rNzBarrierTests.test_reprsQa"FG	a
 

3a"FG	q	
!a"FG		a"ABrN)ra)r0r1r2r3rlr1r9r=r6r<rArCrGrMrRrWr[rr`rbrNrrr
r.r.Hsa	
ANM
.%
;-00< 0D

Crr.)r3rrr	_threadrrrunittestrtestrtest.supportr
skipUnlesshas_fork_supportrrobjectrTestCaser5rErrrrrr$r*r.rrr
<module>rns

1)$##G$<$<%CD
.F.b18$$1"E!LE!PA
AH@+@+Fb@b@Jl*\l*^\\|H'H.Q.Q(MC<MCr