BuL/SrSSKrSSKrSSKrSSKJrJr SSKrSSKrSSK r SSK J r SSK J r \R"\ RS5rSr"SS \5r"S S \R(5r"S S \5r"SS\5r"SS\5r"SS\5r"SS\5r"SS\5r"SS\5r"SS\5r"SS\5rg)z/ Various tests for synchronization primitives. N)start_new_thread TIMEOUT_MAX)support)threading_helperz9platform doesn't support fork (no _at_fork_reinit method)c6[R"SU-5 g)N{Gz?)timesleep)nthreads 6/opt/alt/python313/lib64/python3.13/test/lock_tests.pywait_threads_blockedr s JJuwc:\rSrSrSrS SjrSrSrSrSr Sr g ) Bunchz A bunch of threads. clXlX l/Ul/Ul/UlU(+UlSUlg)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)funcr startedfinished exceptions _can_exit _wait_thread)selfrr wait_before_exits r __init__Bunch.__init__ s5     -- rcX[R"5nURRU5 UR 5 URRU5 [R"[R5HnUR(dM g g![ a%nUR RU5 SnANSnAff=f!URRU5 [R"[R5HnUR(dM f f=fN) threading get_identrappendr BaseExceptionrrrsleeping_retry SHORT_TIMEOUTr)rtidexc_s r task Bunch.task.s!!# C   IIK MM  %++G,A,AB>>>C  ( OO " "3 ' ' ( MM  %++G,A,AB>>>Cs0B C &CCC  CAD)$D)c[R"[R5UlURR 5 [ UR5Hn[URS5 M [R"[R5H)n[UR5UR:dM( U$ U$! SUl e=f)NT)rwait_threads_exitrr$r __enter__ranger rr(rr#lenr)rr's r r-Bunch.__enter__;s,>>w?T?TU ##% 4<<( B/) ''(=(=>A4<< DLL0 ?  !DN s 2C CcD[R"[R5H(n[UR5UR :dM( O UR RSSS5 URnSUlU(a[URS3U5eg)Nz threads raised exceptions) rr#r$r/rr r__exit__rExceptionGroupr)rexc_type exc_value tracebackr'rs r r2Bunch.__exit__Ls''(=(=>A4==!T\\1? ""4t4__   DII;.H!I!+- - rcSUlgNT)rrs r do_finishBunch.do_finish[s r)rrrrrr rN)F) __name__ __module__ __qualname____firstlineno____doc__rr(r-r2r;__static_attributes__r+rr rrs  ! " -rrc&\rSrSrSrSrSrSrg) BaseTestCase_c8[R"5Ulgr)rthreading_setup_threadsr:s r setUpBaseTestCase.setUp`s(88: rch[R"UR6 [R"5 gr)rthreading_cleanuprHr reap_childrenr:s r tearDownBaseTestCase.tearDowncs **DMM:rcTURXS-5 URXS-5 g)Ng333333?g$@)assertGreaterEqual assertLess)ractualexpecteds r assertTimeoutBaseTestCase.assertTimeoutgs& 37 40r)rHN)r=r>r?r@rIrNrUrBr+rr rDrD_s; 1rrDcl\rSrSrSrSrSrSrSrSr Sr S r S r S r S rS rSrSrSrSrg) BaseLockTestspz3 Tests for both recursive and non-recursive locks. c[R"[R5Hn[U5U:dM O UR [U5U5 gr)rr#r$r/ assertEqual)rphaserTr's r wait_phaseBaseLockTests.wait_phaseusB''(=(=>A5zX%? UX.rc&UR5nAgr)locktyperlocks r test_constructorBaseLockTests.test_constructor{s}} rc\UR5nUR[U5S5 Ag)Nz)r` assertRegexreprras r test_reprBaseLockTests.test_reprs%}} d%FG rc|UR5nUR5 UR[U5S5 Ag)Nz)r`acquirerfrgras r test_locked_reprBaseLockTests.test_locked_reprs.}}  d%DE rcFUR5nUR5 Agr)r`rkras r test_acquire_destroy"BaseLockTests.test_acquire_destroys}}  rcfUR5nUR5 UR5 Agrr`rkreleaseras r test_acquire_release"BaseLockTests.test_acquire_releases"}}   rcUR5nURURS55 UR5 gNF)r` assertTruerkrsras r test_try_acquireBaseLockTests.test_try_acquires+}}  U+, rc^^UR5mTR5 /mUU4Sjn[US5 SSS5 URTS5 TR 5 g!,(df  N3=f)NcF>TRTRS55 grwr!rkrbresultsr f3BaseLockTests.test_try_acquire_contended..fs MM$,,u- .rr)r`rkr assertFalsersrrrbrs @@r test_try_acquire_contended(BaseLockTests.test_try_acquire_contendedsU}}  / 1a[  # [s A'' A5cj^UR5mTR5 U4SjnSn[X5n[U5 UR [ UR 5S5 TR5 SSS5 UR [ WR 5U5 g!,(df  N4=f)NcF>TR5 TR5 grrkrsrbsr r/BaseLockTests.test_acquire_contended..f LLN LLNrr)r`rkrr r[r/rrs)rrNbunchrbs @r test_acquire_contended$BaseLockTests.test_acquire_contendeds}}    1[E  #   S0! 4 LLN  U^^,a0[s AB$$ B2c^UR5mU4SjnSU4SjjnT SSS5 [US5 SSS5 UR[5 T [e!,(df  NC=f!,(df  N>=f!,(df  O=fSSS5 O!,(df  O=f[US5 SSS5 g!,(df  g=f)NcF>TR5 TR5 grrrsr r"BaseLockTests.test_with..frrcJ>T UbUeSSS5 g!,(df  g=frr+)errrbs r with_lock*BaseLockTests.test_with..with_locks?I#s "rr)r`r assertRaises TypeError)rrrrbs @r test_withBaseLockTests.test_withs}}    1a[   y )T[ * ) ) 1a[ [[s@A!A2BB! A/2 B B B B,;C Cc^UR5mU4Sjn[US5 SSS5 g!,(df  g=f)NcF>TR5 TR5 grrrsr r)BaseLockTests.test_thread_leak..frr)r`rrrrbs @r test_thread_leakBaseLockTests.test_thread_leaks-}}  1b\ \\s/ =c^^UR5mUR[TRSS5 UR[TRSS9 UR[TRSS9 UR[TR[ S-S9 TR[ S9 TR 5 [R"5nURTRSS95 [R"5nURX!- S5 /mUU4Sjn[US5 SSS5 URTS5 URTSS 5 g!,(df  N8=f) NFritimeoutg}Ô%ITrc>[R"5nTRTRSS95 [R"5nTRX- 5 g)N?r)r monotonicr!rk)t1t2rbresultss r r%BaseLockTests.test_timeout..fs@!B NN4<<<4 5!B NN27 #rrr)r`r ValueErrorrk OverflowErrorrrsr rrxrRrrrU)rrrrrbrs @@r test_timeoutBaseLockTests.test_timeouts}} *dllE1= *dllDA -uE -{QO [ )  ^^   Q /0 ^^  # $ 1a[  $ 71:s+[s -E!! E/c|UR5n[R"U5nURU"55 gr)r`weakrefrefassertIsNotNonerrbrs r test_weakref_exists!BaseLockTests.test_weakref_existss+}}kk$ SU#rcUR5n[R"U5nA[R"5 UR U"55 gr)r`rrgccollect assertIsNoners r test_weakref_deleted"BaseLockTests.test_weakref_deleteds7}}kk$   #% rr+N)r=r>r?r@rAr]rcrhrlrortryrrrrrrrrBr+rr rXrXpsM/      1$: ,6$ !rrXc:\rSrSrSrSrSrSr\S5r Sr g) LockTestsi zb Tests for non-recursive, weak locks (which can be acquired and released from different threads). c^^UR5m/mUU4Sjn[R"5 [US5 UR TS5 TR 5 UR TS5 SSS5 g!,(df  g=f)Nc>TR5 TRS5 TR5 TRS5 grrkr!)rbr\sr r#LockTests.test_reacquire..fs- LLN LL  LLN LL rr+r)r`rr,rr]rsrrrbr\s @@r test_reacquireLockTests.test_reacquiresc}}   / / 1 Q # OOE1 % LLN OOE1 %2 1 1s AA;; B c^UR5mTR5 U4Sjn[US5 SSS5 TR5 TR5 g!,(df  N/=f)Nc&>TR5 gr)rsrsr r*LockTests.test_different_thread..f& LLNrr)r`rkrrsrs @r test_different_threadLockTests.test_different_thread"sG}}   1a[   [s A A-cUR5nUR5 URURSS95 UR5 URUR 55 UR URSS95 g)NrrF)blocking)r`rkrrslockedrxras r test_state_after_timeout"LockTests.test_state_after_timeout-se}}  d34  '  e 45rcSnUR5nUR5 U"U5 UR5nUR5 UR5 U"U5 g)NcDUR5 UR5 grrrs r use_lock/LockTests.test_at_fork_reinit..use_lock9s LLN LLNr)r`_at_fork_reinitrk)rrrblock2s r test_at_fork_reinitLockTests.test_at_fork_reinit7sP }}    rr+N) r=r>r?r@rArrr requires_forkrrBr+rr rr s*&( 6rrc<\rSrSrSrSrSrSrSrSr Sr S r g ) RLockTestsiKz Tests for recursive locks. cUR5nUR5 UR5 UR5 UR5 UR5 UR5 grrrras r rRLockTests.test_reacquireOsC}}      rcdUR5nUR[UR5 UR 5 UR 5 UR5 UR 5 UR5 UR5 UR[UR5 gr)r`r RuntimeErrorrsrkras r test_release_unacquired"RLockTests.test_release_unacquiredXsk}} , 5       , 5rcdUR5nUR[UR5 UR 5 UR 5 UR 5 UR 5 UR 5 UR 5 UR[UR5 gr)r`rr _release_saverkrsras r test_release_save_unacquired'RLockTests.test_release_save_unacquireddso}} ,(:(:;       ,(:(:;rc^^^TR5mTRSTR55 TR5 TRSTR55 TR5 TR5 TRSTR55 TR 5 TRSTR55 TR 5 TR 5 TRSTR55 /mUUU4Sjn[ R "5 [US5 TRTS5 TRSTR55 TRS5 TRTS5 TRSTR55 SSS5 g!,(df  g=f)Nrrrc>TR5 TRS5 TRTS5 TR5 TRS5 g)Nr)rkr!r]rs)rbr\rsr r*RLockTests.test_recursion_count..fs; LLN LL  OOE1 % LLN LL rr+) r`r[_recursion_countrkrsrr,rr]r!rs` @@r test_recursion_countRLockTests.test_recursion_countpsK}} D1134  D1134   D1134  D1134   D1134  / / 1 Q # OOE1 %   Q 5 5 7 8 LL  OOE1 %   Q 5 5 7 82 1 1s 3BF>> G c^UR5mU4Sjn[USS5nUR[TR5 UR 5 SSS5 g!UR 5 f=f!,(df  g=f)Nc&>TR5 gr)rkrsr r+RLockTests.test_different_thread..frrrT)r`rrrrsr;)rrrrbs @r r RLockTests.test_different_threadse}} 1a % "!!, =!  !  s"A6 A!A6!A33A66 Bcf^^UR5mURTR55 TR5 UR TR55 TR5 UR TR55 /mUU4Sjn[ US5 SSS5 URTS5 TR 5 UR TR55 TR 5 URTR55 g!,(df  N=f)NcD>TRTR55 gr)r! _is_ownedr~sr r$RLockTests.test__is_owned..fs MM$..* +rrr)r`rrrkrxrrsrs @@r test__is_ownedRLockTests.test__is_owneds}} )*  ()  () , 1a[  #  ()  )* [s %D"" D0r+N) r=r>r?r@rArrrrrrrBr+rr rrKs& 6 <!9F "+rrcL\rSrSrSrSrSrSrSrSr \ S5r S r S r g ) EventTestsiz Tests for Event objects. cUR5nURUR55 UR5 UR UR55 UR5 UR UR55 UR 5 URUR55 UR 5 URUR55 gr) eventtyperis_setsetrxclearrevts r test_is_setEventTests.test_is_setsnn &    %    %  &  &rc4^^^Sn/m/mUUU4Sjn[X25 [U5 UR[T5S5 TR 5 SSS5 URTS/U-5 URTS/U-5 g!,(df  N;=f)Nrc>TRTR55 TRTR55 gr)r!wait)rresults1results2sr r#EventTests._check_notify..fs' OOCHHJ ' OOCHHJ 'rrT)rr r[r/r)rrrrrr s ` @@r _check_notifyEventTests._check_notifys  (1[  #   S]A . GGI  D6A:. D6A:.[s 7B  BcUR5nURU5 UR5 UR5 URU5 gr)rr rrrs r test_notifyEventTests.test_notifys<nn 3    3rc^^^UR5m/m/mSnUUU4Sjn[X!5 SSS5 URTS/U-5 TH(up4URU5 UR US5 M* /m/mTR 5 [X!5 SSS5 URTS/U-5 THup4UR U5 M g!,(df  N=f!,(df  NR=f)Nrc>TRTRS55 [R"5nTRS5n[R"5nTRXU- 45 g)Ngr)r!rr r)rrrrrr s r r"EventTests.test_timeout..fsN OOCHHSM *!B A!B OOQRL )rFrT)rrr[rrUrrx)rrrrdtrrr s @@@r rEventTests.test_timeoutsnn  *1[  E7Q;/EA   Q    r3 '   1[  D6A:.EA OOA ![[sCC( C%( C6c ^^UR5m/mUU4SjnSn[X5 [U5 TR5 TR 5 SSS5 UR TS/U-5 g!,(df  N%=f)Ncb>TRTR[R55 gr)r!rr LONG_TIMEOUT)eventrsr r(EventTests.test_set_and_clear..fs NN5::g&:&:; z<\w+\.Event at .*: set>)rrfrgrrs r rhEventTests.test_reprsAnn c$@A   c$>?rr+N)r=r>r?r@rArr rrrrrrhrBr+rr rrs: '/( >.&77@rrcH\rSrSrSrSrSrSrSrSr Sr S r S r S r g ) ConditionTestsi"z Tests for condition variables. cUR5nUR5 UR5 UR5 UR5 [R"5nURU5nUR5 UR URS55 UR5 UR URS55 UR URS55 UR5 U UR URS55 SSS5 g!,(df  g=frw)condtyperkrsrLockrrx)rcondrbs r test_acquireConditionTests.test_acquire's}}    ~~}}T"  e,-   U+, e,-     T\\%0 1TTs !D33 EcdUR5nUR[UR5 gr)r%rrrrr's r test_unacquired_wait#ConditionTests.test_unacquired_wait:s!}} , 2rcdUR5nUR[UR5 gr)r%rrnotifyr+s r test_unacquired_notify%ConditionTests.test_unacquired_notify>s!}} , 4rcX^^^^ ^ /m/m /m SmUUUU U 4SjnSn[X#5 [R"[R5Hn[ T5U:dM O TR 5 UR T /5 SnTR5 TRU5 [U5 SmTR5 [R"[R5Hn[ T 5U:dM O UR T S/U-5 UR T /5 [R"[R5Hn[ T5U:dM O TR5 TRS5 [U5 SmTR5 [R"[R5H"n[ T 5[ T 5-X5-:dM" O X5- nUR T S/U-S/U--5 UR T S/U-5 [R"[R5Hn[ T5U:dM O TR5 TR5 [U5 SmTR5 [R"[R5Hn[ T 5U:dM O UR T S/U-S/U--5 UR T S/U-S /U--5 SSS5 g!,(df  g=f) NrcV>TR5 TRT5 TR5nTR5 TRUT45 TR5 TRT5 TR5nTR5 TRUT45 gr)rkr!rrs)rr' phase_numreadyrr s r r'ConditionTests._check_notify..fRsw LLN LL #YY[F LLN OOVY/ 0 LLN LL #YY[F LLN OOVY/ 0rrrr)Trr)Tr)Tr) rrr#r$r/rr[rkr/r rs notify_all) rr'rrr'count1count2r4r5rr s ` @@@@r r ConditionTests._check_notifyBs  1 1  1[++G,A,ABu:?C KKM   Xr *F LLN KK   (I LLN++G,A,ABx=F*C   X {V'; <   Xr *++G,A,ABu:'C LLN KKN  #I LLN++G,A,ABx=3x=0QZ@CZF   X {V';ykF>R'R S   X {V'; <++G,A,ABu:?C LLN OO   #I LLN++G,A,ABx=A%C   X {V';ykF>R'R S   X {V';ykF>R'R SA[[s45LBLL L)chUR5nURU5 URU5 gr)r%r r+s r rConditionTests.test_notifys)}} 4  4 rc$^^^UR5mSm/mUUU4SjnSn[X5 SSS5 UR[T5U5 TH(up4UR UT5 UR U5 M* g!,(df  NX=f)Nrc>TR5 [R"5nTRT5n[R"5nTR 5 TR X - U45 gr)rkr rrrsr!)rrrr'rrs r r&ConditionTests.test_timeout..fsN LLN!BYYw'F!B LLN NNBGV, -rr)r%rr[r/rUr)rrrrrr'rrs @@@r rConditionTests.test_timeouts{}} .  1[  Wq)!JB   r7 +   V $" [s B Bc>^^^TR5mSmUUU4Sjn[US5 [S5H9n[R"S5 T TS- mTR 5 SSS5 M; SSS5 g!,(df  MU=f!,(df  g=f)Nrc>T TRU4Sj5nTRU5 TRTS5 SSS5 g!,(df  g=f)Nc>TS:H$Nr+statesr 8ConditionTests.test_waitfor..f..s uzrrE)wait_forrxr[)rr'rrGs r r&ConditionTests.test_waitfor..fs;'9:'  *s 9A ArrEr)r%rr.r r r/)rrir'rGs` @@r test_waitforConditionTests.test_waitforsp}} + 1a[1X 5!QJEKKMT[T[s#'BA<' B< B B Bc|^^^^TR5mSm/mUUUU4Sjn[US5 [S5H9n[R"S5 T TS- mTR 5 SSS5 M; SSS5 TR [T5S5 g!,(df  Mp=f!,(df  N<=f)Nrc(>T [R"5nTRU4SjSS9n[R"5U- nTRU5 TR US5 TR S5 SSS5 g!,(df  g=f)Nc>TS:H$rDr+rFsr rH@ConditionTests.test_waitfor_timeout..f..s qr皙?r)r rrJrrUr!)rrr'rrGsuccesss r r.ConditionTests.test_waitfor_timeout..fsj^^%'8#F^^%*  (""2s+t$ s A6B Brrr)r%rr.r r r/r[r/)rrrLr'rGrTs` @@@r test_waitfor_timeout#ConditionTests.test_waitfor_timeouts}} % %1a[1X 5!QJEKKMT Wq) T [s#'B-B+ B- B* %B-- B;r+N)r=r>r?r@rAr(r,r0r rrrMrVrBr+rr r#r#"s22&35`TD! %4" *rr#cT\rSrSrSrSrSrSrSrSr Sr S r S r S r S rS rg)BaseSemaphoreTestsiz: Common tests for {bounded, unbounded} semaphore objects. cUR[URSS9 UR[UR[R*S9 g)N)value)rrsemtypesysmaxsizer:s r rc#BaseSemaphoreTests.test_constructors: *dllB? *dllS[[LIrcURS5nUR5 UR5 URS5nUR5 UR5 UR5 UR5 g)Nrr)r]rkrsrsems r r(BaseSemaphoreTests.test_acquiresRll1o  ll1o    rcFUR5nUR5 Agr)r]rkrbs r ro'BaseSemaphoreTests.test_acquire_destroyslln rc@^ ^ ^ ^ ^SnURU5m T R5 /m/m /m Sm U U U U U4SjnU U 4SjnSn[X$5 US- nU"U5 URT T -S/U-5 Sm [ U5HnT R 5 M UnU"XW-5 UR[ T T -5S/U-S/U--5 Sm US- n[ U5HnT R 5 M U"XW-U-5 UR[ T T -5S/U-S/U--S/U--5 URT RS55 Sn T R 5 SSS5 URTS /WW-W-W --5 g!,(df  N.=f) Nrc>TRTR55 TRT5 TRTR55 TRT5 grr})r4rr rc sem_resultssr r7BaseSemaphoreTests.test_acquire_contended..funcsC   s{{} - OOI &   s{{} - OOI &rc>[R"[R5H n[T5[T5-U:dM g grrr#r$r/countr'rr s r wait_count=BaseSemaphoreTests.test_acquire_contended..wait_count7++G,A,ABx=3x=0E9Cr rrFT)r]rkrr[r.rssortedr)r sem_valuerrprr8rLr9count3count4r4rr rcrjs @@@@@r r)BaseSemaphoreTests.test_acquire_contendeds ll9%    ' '   4^]F v    X01#, ?I9% &F v '   VHx$78S6\QC&L8 :I!mF6] # v/ 0   VHx$78S6\QC&L8A3<G I   S[[/ 0F KKM9< 6F?V#;f#DE G=^s DF Fc^^^ ^ SnURU5m T R5 /m/m SmUUU U 4SjnUU 4Sjn[US5 US- nU"U5 URTT -S/U-5 SmUnT R U5 U"XE-5 UR[ TT -5S/U-S/U--5 SmUS- nT R U5 U"XE-U-5 UR[ TT -5S/U-S/U--S/U--5 UR T RS55 T R 5 SSS5 g!,(df  g=f) Nrhrc>TR5 TRT5 TR5 TRT5 grr)r4rr rcsr r2BaseSemaphoreTests.test_multirelease..funcDs- KKM OOI & KKM OOI &rc>[R"[R5H n[T5[T5-U:dM g grrmrns r rp8BaseSemaphoreTests.test_multirelease..wait_countKrrrrsrrF)r]rkrr[rsrtr) rrurrpr8r9rvr4rr rcs @@@@r test_multirelease$BaseSemaphoreTests.test_multirelease<sW ll9%   ' '  4_]F v    X01#, ?IF KK  v '   VHx$78S6\QC&L8 :I]F KK  v/ 0   VHx$78S6\QC&L8A3<G I   S[[/ 0 KKM3__s C4E EcFURS5nURURS55 URURS55 URURS55 UR 5 URURS55 g)NrF)r]rxrkrrsrbs r ry#BaseSemaphoreTests.test_try_acquireksnll1o  E*+  E*+ U+,   E*+rc^^URS5mTR5 /mUU4Sjn[US5 SSS5 UR[ T5S/S-S/S--5 g!,(df  N5=f)NrEc>TRTRS55 TRTRS55 grwr})rrcsr r8BaseSemaphoreTests.test_try_acquire_contended..fws- NN3;;u- . NN3;;u- .rrFrhTr)r]rkrr[rt)rrrrcs @@r r-BaseSemaphoreTests.test_try_acquire_contendedssell1o  /1a[  5'A+! *CE [s A** A8c0URS5nUR[URSSS9 UR URSS95 UR URSS95 UR URSS95 UR 5 UR URSS95 [R"5nUR URSS95 [R"5U- nURUS5 g)NrFg?rg{Gzt?r) r]rrrkrxrrsr rrU)rrctrs r test_acquire_timeout'BaseSemaphoreTests.test_acquire_timeoutsll1o *ckk5#F  E 23  E 23 U34   E 23 NN  S12 ^^  ! 2s#rc ^UR5mTR5 U4Sjn[US5n[S5 UR UR 5 TR 5 SSS5 g!,(df  g=f)NcF>TR5 TR5 grr)rcsr r0BaseSemaphoreTests.test_default_value..fs KKM KKMrr)r]rkrr rrrs)rrrrcs @r test_default_value%BaseSemaphoreTests.test_default_valuesXlln  1a[E  #   U^^ , KKM [[s 7A44 Bc@^^TRS5mSUU4SjjnU"5 TRTRS55 TR5 TR [ U[ 5 TRTRS55 TR5 g)Nrc*>T TRTRS55 TR5 T TRTRS55 U(aUeSSS5 SSS5 g!,(df  N=f!,(df  g=frw)rxrkrsr)rrrcs r _with+BaseSemaphoreTests.test_with.._withsg E 23 $$S[[%78! Ss"3B*A3"B3 B =B BFr)r]rxrkrsrr)rrrcs` @r rBaseSemaphoreTests.test_withsoll1o " "   E*+  )UI6  E*+ rr+N)r=r>r?r@rArcr(rorr~ryrrrrrBr+rr rYrYs>J 6Gp-^, F $ rrYc$\rSrSrSrSrSrSrg)SemaphoreTestsiz! Tests for unbounded semaphores. cURS5nUR5 UR5 UR5 UR5 gNr)r]rsrkrbs r r&SemaphoreTests.test_release_unacquireds3ll1o    rc(URS5nUR[U5S5 UR5 UR[U5S5 UR 5 UR 5 UR[U5S5 g)Nrz<\w+\.Semaphore at .*: value=3>z<\w+\.Semaphore at .*: value=2>z<\w+\.Semaphore at .*: value=4>)r]rfrgrkrsrbs r rhSemaphoreTests.test_reprsill1o c$FG  c$FG   c$FGrr+Nr=r>r?r@rArrhrBr+rr rrsHrrc$\rSrSrSrSrSrSrg)BoundedSemaphoreTestsiz Tests for bounded semaphores. cUR5nUR[UR5 UR 5 UR5 UR[UR5 gr)r]rrrsrkrbs r r-BoundedSemaphoreTests.test_release_unacquiredsGlln *ckk2   *ckk2rcURS5nUR[U5S5 UR5 UR[U5S5 g)Nrz(<\w+\.BoundedSemaphore at .*: value=3/3>z(<\w+\.BoundedSemaphore at .*: value=2/3>)r]rfrgrkrbs r rhBoundedSemaphoreTests.test_reprsBll1o c$OP  c$OPrr+Nrr+rr rrs3Qrrc\rSrSrSrSrSrSrSrSr Sr S r SS jr S r S rS rSrSrSrSrSrSrSrSrg) BarrierTestsiz Tests for Barrier objects. rg@cVURURURS9Ulg)Nr) barriertyperdefaultTimeoutbarrierr:s r rIBarrierTests.setUps#''8K8K'L rc8URR5 gr)rabortr:s r rNBarrierTests.tearDowns rcd[XR5 SSS5 g!,(df  g=fr)rrrrs r run_threadsBarrierTests.run_threadss 1ff    s! /c`URRnURX0R5 [ U5HnUSR S5 UR[ US5XC-5 URR5 USR S5 UR[ US5US-U-5 URR5 M URURRS5 URURR5 g)NrTr) rpartiesr[rr.r!r/r n_waitingrbroken)rrnmrLs r multipassBarrierTests.multipasss LL  FF#qA AJ  d #   S_ae 4 LL    AJ  d #   S_q1uk : LL     //3 ,,-rcUR[URSS9 UR[URSS9 g)Nr)rr[)rrrr:s r rcBarrierTests.test_constructors8 *d&6&6B *d&6&6CrcD^^^///mUUU4SjnTRU5 g)z+ Test that a barrier is passed in lockstep c*>TRTT5 gr)r)passesrrsr r$BarrierTests.test_barrier..fs NN7F +rNr)rrrrs`` @r test_barrierBarrierTests.test_barriers!b' , rc$URS5$)z3 Test that a barrier works for 10 consecutive runs rs)rr:s r test_barrier_10BarrierTests.test_barrier_10s  $$rc^^/mUU4SjnTRU5 TR[T5[[TR555 g)z) test the return value from barrier.wait c\>TRR5nTRU5 gr)rrr!)rrrs r r(BarrierTests.test_wait_return..fs! !!#A NN1 rN)rr[sumr.r)rrrs` @r test_wait_returnBarrierTests.test_wait_return s@   Ws5='9:rc^^^/mU4SjnTRTRU5mUUU4SjnTRU5 g)z Test the 'action' callback c(>TRS5 gr9)r!)rsr action(BarrierTests.test_action..actions NN4 rc\>TR5 TR[T5S5 gr)rr[r/)rrrsr r#BarrierTests.test_action..fs LLN   S\1 -rN)rrr)rrrrrs` @@r test_actionBarrierTests.test_actions: !""46662 . rc^^^/m/mUUU4SjnTRU5 TR[T5S5 TR[T5TRS- 5 TR TR R 5 g)z; Test that an abort will put the barrier in a broken state cd>TRR5nUTRS-:Xa[eTRR5 TR S5 g![ R a TR S5 g[a TRR5 gf=fNrT)rrrrr!rBrokenBarrierErrorr)rLrr rs r r"BarrierTests.test_abort..f+s LL%%' >&& !!#%// &%  ""$ sAA""%B/ #B/.B/rrN)rr[r/rrxrr)rrrr s` @@r test_abortBarrierTests.test_abort%sj   X* Xq1  ++,rc^^^^/m/m/mUUUU4SjnTRU5 TR[T5S5 TR[T5TRS- 5 TR[T5TR5 g)z< Test that a 'reset' on a barrier frees the waiting threads cB>TRR5nUTRS-:Xao[R"[R 5H,nTRR TRS- :dM, O TRR5 O,TRR5 TRS5 TRR5 TRS5 g![Ra TRS5 NSf=f)NrrT) rrrrr#r$rresetr!rr)rLr'rr results3rs r r"BarrierTests.test_reset..fDs !!#ADFFAI~ //0E0EFA||--$&&1*=G ""$*LL%%'OOD) LL    OOD ! !33*OOD)*s+C66%DDrrN)rr[r/r)rrrr rs` @@@r test_resetBarrierTests.test_reset=sv " "$  X* Xq1 X/rcV^^^^^/m/m/mTRTR5mUUUUU4SjnTRU5 TR[ T5S5 TR[ T5TRS- 5 TR[ T5TR5 g)z6 Test that a barrier can be reset after being broken. cP>TRR5nUTRS-:Xa[eTRR5 TR S5 TR5TRS-:XaTRR5 TR5 TRR5 TR S5 g![ R a TR S5 N[a TRR5 Nf=fr) rrrrr!rrrr)rLbarrier2rr rrs r r,BarrierTests.test_abort_and_reset..fds LL%%' >&& !!#%}}$&&!)+ ""$ MMO LL    OOD !// &%  ""$ sAC%D%?#D%$D%rrN)rrrr[r/)rrrrr rs` @@@@r test_abort_and_reset!BarrierTests.test_abort_and_reset\s##DFF+ " "*  X* Xq1 X/rc4^U4SjnTRU5 g)z Test wait(timeout) c*>TRR5nUTRS-:Xa#[R"TR S- 5 TR [RTRRTR S- 5 g)NrrE) rrrr r rrrr)rLrs r r$BarrierTests.test_timeout..fsm !!#ADFFaK 4..23   i::"ll//1D1Dq1H JrNrrs` r rBarrierTests.test_timeout~s J rc^^SnTRSUS9mUU4Sjn[R"5n[US5 SSS5 [R"5U- nTR XA5 g!,(df  N8=f)z$ Test the barrier's default timeout rSrrcZ>TR[RTR5 gr)rrrr)rrsr r,BarrierTests.test_default_timeout..fs   i::%ll ,rrN)rr rrrQ)rrr start_timerrs` @r test_default_timeout!BarrierTests.test_default_timeoutsj""1g"6 ,^^% 1a[  ^^  * ,[s A11 A?cfURS5nUR5 UR5 gr)rr)rbs r test_single_threadBarrierTests.test_single_threads$   Q   rc:^^URS5m[RmUR[ T5S5 UU4SjnSn[ X5 [R "[R5HnTRU:dM O UR[ T5S5 TRT5 SSS5 UR[ T5S5 TR5 UR[ T5S5 g!,(df  NU=f)Nrz!<\w+\.Barrier at .*: waiters=0/3>c(>TRT5 gr)r)rrsr r!BarrierTests.test_repr..fs LL !rrz!<\w+\.Barrier at .*: waiters=2/3>z<\w+\.Barrier at .*: broken>) rrrrfrgrr#r$rrr)rrrr'rrs @@r rhBarrierTests.test_reprs""1%&& g(LM "  1[++G,A,AB$$)C   T']A C LL ! g= ?   g8 :![s6D  0D  D)rN)r)r=r>r?r@rArrrIrNrrrcrrrrrrrrrrrhrBr+rr rrsf ANM .D% ; -00> 0D -  :rr)rArr^r _threadrrrunittestrtestr test.supportr skipUnlesshas_fork_supportrr objectrTestCaserDrXrrrr#rYrrrr+rr rs 1)##G$<$<%CD  @F@F18$$1"V!LV!r? ?Dd+d+Nm@m@`G*\G*TAAFH'H.Q.Q(`:<`:r