ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙa 3gNx@s(dZddlZddlZddlZddlZddlmZmZddlZddl Z ddl Z ddl m Z e eeddZddZGd d d eZGd d d e jZGd ddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZdS)z/ Various tests for synchronization primitives. N)start_new_thread TIMEOUT_MAX)supportforkz9platform doesn't support fork (no _at_fork_reinit method)cCstddS)N{Gz?)timesleepr r ./opt/python39/lib/python3.9/test/lock_tests.py_waitsr c@s2eZdZdZd ddZddZddZd d Zd S) Bunchz A bunch of threads. Fcsx_|_g_g_| _t_jfdd}zt |D]}t |dqLWnd_Yn0dS)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. c sZt}j|z$Wj|jsVtq*nj|jsTtqF0dSN) threading get_identstartedappendfinished _can_exitr )tidfselfr r task,s   zBunch.__init__..taskr TN) rnrrrrwait_threads_exit wait_thread __enter__ranger)rrrZwait_before_exitrir rr __init__s    zBunch.__init__cCst|j|jkrtqdSr )lenrrr rr r r wait_for_started=szBunch.wait_for_startedcCs,t|j|jkrtq|jddddSr )r rrr r__exit__r!r r r wait_for_finishedAszBunch.wait_for_finishedcCs d|_dSNT)rr!r r r do_finishGszBunch.do_finishN)F)__name__ __module__ __qualname____doc__rr"r$r&r r r r r s  r c@s$eZdZddZddZddZdS) BaseTestCasecCst|_dSr )rZthreading_setup_threadsr!r r r setUpLszBaseTestCase.setUpcCstj|jtdSr )rZthreading_cleanupr, reap_childrenr!r r r tearDownOs zBaseTestCase.tearDowncCs$|||d|||ddS)Ng333333?g$@)ZassertGreaterEqual assertLess)ractualZexpectedr r r assertTimeoutSszBaseTestCase.assertTimeoutN)r'r(r)r-r/r2r r r r r+Ksr+c@sxeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZdS) BaseLockTestsz; Tests for both recursive and non-recursive locks. cCs|}~dSr )locktyperlockr r r test_constructoraszBaseLockTests.test_constructorcCs|}|t|d~dS)Nz)r4 assertRegexreprr5r r r test_represzBaseLockTests.test_reprcCs&|}||t|d~dS)Nz)r4acquirer8r9r5r r r test_locked_reprjszBaseLockTests.test_locked_reprcCs|}|~dSr )r4r;r5r r r test_acquire_destroypsz"BaseLockTests.test_acquire_destroycCs|}||~dSr r4r;releaser5r r r test_acquire_releaseusz"BaseLockTests.test_acquire_releasecCs$|}||d|dSNF)r4 assertTruer;r?r5r r r test_try_acquire{szBaseLockTests.test_try_acquirecsJ|gfdd}t|d|ddS)NcsddSrArr;r r6resultr r rsz3BaseLockTests.test_try_acquire_contended..fr)r4r;r r$ assertFalser?rrr rEr test_try_acquire_contendedsz(BaseLockTests.test_try_acquire_contendedcsp|d}fdd}t||}|t|t|jd| |t|j|dS)NcsdSr r;r?r r6r r rsz/BaseLockTests.test_acquire_contended..fr) r4r;r r"r assertEqualr rr?r$rNrbr rMr test_acquire_contendeds  z$BaseLockTests.test_acquire_contendedcsV|fdd}dfdd }|t|d|t|tt|ddS)NcsdSr rLr rMr r rsz"BaseLockTests.test_with..fcs4|dur|Wdn1s&0YdSr r errrMr r _withsz&BaseLockTests.test_with.._withrG)N)r4r r$ assertRaises TypeError)rrrUr rMr test_withs zBaseLockTests.test_withcs`|fdd}tt}t|dtt|kr\td||ttdS)NcsdSr rLr rMr r rsz)BaseLockTests.test_thread_leak..fg?) r4r r enumerater r$rrrN)rrrr rMr test_thread_leaks   zBaseLockTests.test_thread_leakcs||tjdd|jtjdd|jtjdd|jtjtddjtdt}| jddt}| ||dgfdd}t |d | d |dd dS) NFrGitimeoutg}Ô%ITrKcs4t}jddt}||dS)N?r\)r monotonicrr;)t1t2r6resultsr r rsz%BaseLockTests.test_timeout..frr^)r4rV ValueErrorr; OverflowErrorrr?rr_rBr0r r$rHr2)rr`rarr rbr test_timeouts  zBaseLockTests.test_timeoutcCs"|}t|}||dSr )r4weakrefrefZassertIsNotNonerr6rhr r r test_weakref_existss z!BaseLockTests.test_weakref_existscCs,|}t|}~t||dSr )r4rgrhgcZcollectZ assertIsNonerir r r test_weakref_deleteds  z"BaseLockTests.test_weakref_deletedN)r'r(r)r*r7r:r<r=r@rCrJrRrXr[rfrjrlr r r r r3\s r3c@s4eZdZdZddZddZddZedd Zd S) LockTestszn Tests for non-recursive, weak locks (which can be acquired and released from different threads). cs|gfdd}tpt|dtdkrBtq.t|tdtdkrttq`|tdWdn1s0YdS)Ncs(dddSr r;rr r6Zphaser r rs z#LockTests.test_reacquire..fr rrG)r4rrrr r rNr?rIr ror test_reacquires    zLockTests.test_reacquirecsB|fdd}t|d}|dS)Ncs dSr )r?r rMr r rsz*LockTests.test_different_thread..frG)r4r;r r$r?rrrQr rMr test_different_threads  zLockTests.test_different_threadcCsN|}|||jdd|||||jdddS)Nrr\F)blocking)r4r;rHr?lockedrBr5r r r test_state_after_timeout s z"LockTests.test_state_after_timeoutcCsDdd}|}||||}||||dS)NcSs||dSr rLrMr r r use_locksz/LockTests.test_at_fork_reinit..use_lock)r4_at_fork_reinitr;)rrwr6Zlock2r r r test_at_fork_reinitszLockTests.test_at_fork_reinitN) r'r(r)r*rqrsrv requires_forkryr r r r rms   rmc@s8eZdZdZddZddZddZdd Zd d Zd S) RLockTestsz$ Tests for recursive locks. cCs<|}||||||dSr r>r5r r r rq,szRLockTests.test_reacquirecCsX|}|t|j|||||||t|jdSr )r4rV RuntimeErrorr?r;r5r r r test_release_unacquired5sz"RLockTests.test_release_unacquiredcCsX|}|t|j|||||||t|jdSr )r4rVr| _release_saver;r?r5r r r test_release_save_unacquiredAsz'RLockTests.test_release_save_unacquiredcsR|fdd}t|dd}z|tjW|n |0|dS)Ncs dSr )r;r rMr r rPsz+RLockTests.test_different_thread..frGT)r4r rVr|r?r&r$rrr rMr rsMs  z RLockTests.test_different_threadcs||||gfdd}t|d|d||dS)NcsdSr )r _is_ownedr rEr r rasz$RLockTests.test__is_owned..frGr)r4rHrr;rBr r$r?rIr rEr test__is_ownedYszRLockTests.test__is_ownedN) r'r(r)r*rqr}rrsrr r r r r{(s     r{c@sDeZdZdZddZddZddZdd Zd d Ze d d Z dS) EventTestsz" Tests for Event objects. cCsr|}||||||||||||||dSr ) eventtyperHis_setsetrBclearrevtr r r test_is_setpszEventTests.test_is_setcs|d}ggfdd}t||}|t|td||dg||dg|dS)NrKcs dSr rwaitr rresults1results2r r rsz#EventTests._check_notify..frT)r r"r rNr rr$)rrrPrrQr rr _check_notify|s zEventTests._check_notifycCs0|}||||||dSr )rrrrrr r r test_notifys  zEventTests.test_notifycs|ggd}fdd}t|||dg|D]\}}||||dqHggt|||dg|D]\}}||qdS)NrKcs@dt}d}t}|||fdS)Ngr^)rrrr_)r`rrarr r rs  z"EventTests.test_timeout..fFr^T)rr r$rNrHr2rrB)rrPrrdtr rr rfs"   zEventTests.test_timeoutcsn|gdd}fdd}t||}|t||dg|dS)Ng?rKcsddSNrr rrcr]r r rsz(EventTests.test_set_and_clear..fT) rr r"rrrrr$rNrOr rr test_set_and_clears  zEventTests.test_set_and_clearcCs|}|j"||jdWdn1s60Y||j"||jdWdn1sv0YdSrA)r_condrHr;rxrr r r rys 0zEventTests.test_at_fork_reinitN) r'r(r)r*rrrrfrrzryr r r r rks rc@sPeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ dS)ConditionTestsz( Tests for condition variables. cCs|}||||t}||}|||d|||d||d|| ||dWdn1s0YdSrA)condtyper;r?rLockrHrB)rcondr6r r r test_acquires zConditionTests.test_acquirecCs|}|t|jdSr )rrVr|rrrr r r test_unacquired_waitsz#ConditionTests.test_unacquired_waitcCs|}|t|jdSr )rrVr|notifyrr r r test_unacquired_notifysz%ConditionTests.test_unacquired_notifycsd}gggdfdd}t||}|tdkrNtq:|gdtdtdkrtq|dgd|gtdkrtqdtdttd krtq|dgdd gd|d gdtdkrTtq< tdtdkrtqv|dgdd gd|d gdd gd| dS) NrKrcsd}|f}|fdSr )r;rrr?rFr phase_numreadyrrr r rs  z'ConditionTests._check_notify..frG)TrGrp)Trp)Tr) r r"r r rrNr;rr? notify_allr$)rrrPrrQr rr rsX           zConditionTests._check_notifycCs |}||||dSr )rrrr r r r4s zConditionTests.test_notifycsd|gd}fdd}t|||t|D]\}}||d||q@dS)NrKcs@t}d}t}|||fdS)Nr^)r;rr_rr?r)r`rFrarrcr r r>s  z&ConditionTests.test_timeout..fr^)rr r$rNr r2rH)rrPrrrFr rr rf:s  zConditionTests.test_timeoutc sdfdd}t|d}|tdD]B}td d7Wdq61sn0Yq6|dS)NrcsP8fdd}|dWdn1sB0YdS)NcsdkSrr r stater r Uz8ConditionTests.test_waitfor..f..r)wait_forrBrNrrrrr r rSs z&ConditionTests.test_waitfor..frGrr)rr r"rrrrr$rrrQrr rr test_waitforPs   (zConditionTests.test_waitforc sdgfdd}t|d}|tdD]B}td d7Wdq<1st0Yq<|t ddS)NrcsrZt}jfdddd}t|}||ddWdn1sd0YdS)NcsdkSrr r rr r rhrz@ConditionTests.test_waitfor_timeout..f..g?r\)rr_rrHr2r)rrFrrrsuccessr r res   z.ConditionTests.test_waitfor_timeout..frGrr) rr r"rrrrr$rNr rr rr test_waitfor_timeoutas   (z#ConditionTests.test_waitfor_timeoutN) r'r(r)r*rrrrrrfrrr r r r rsJrc@s`eZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ dS)BaseSemaphoreTestszB Common tests for {bounded, unbounded} semaphore objects. cCs,|jt|jdd|jt|jtj ddS)N)value)rVrdsemtypesysmaxsizer!r r r r7~sz#BaseSemaphoreTests.test_constructorcCsH|d}|||d}||||dS)NrGrp)rr;r?rsemr r r rs  zBaseSemaphoreTests.test_acquirecCs|}|~dSr )rr;rr r r r=sz'BaseSemaphoreTests.test_acquire_destroycst|dd}gggdfdd}t|d}|ttdkrhtqL|dgddtdD] }qttdkrtq|t dgddgdd tdD] }qttd krtq|t dgddgdd gd| d | |d gd dS)N rcs4dSr rDr rrrrZ sem_resultsr r rs z4BaseSemaphoreTests.test_acquire_contended..frG rpFT) rr;r r"r r rNrr?sortedrHr$)rrPrrQrr rr rRs:    $  .z)BaseSemaphoreTests.test_acquire_contendedcs>|dggdfdd}t|d}|ttdkr^tqB|dgdddttdkrtq|tdgddgdd dttd krtq|tdgddgdd gd| d | dS) Nrrcs(dSr rnr rrrrr r rs z/BaseSemaphoreTests.test_multirelease..frrrGrrprF) rr;r r"r r rNr?rrHr$rrr rr test_multireleases0   $ .z$BaseSemaphoreTests.test_multireleasecCsV|d}||d||d||d|||ddS)NrpF)rrBr;rHr?rr r r rCs  z#BaseSemaphoreTests.test_try_acquirecsV|dgfdd}t|d|tdgddgddS) Nrcs$dddSrArDr rcrr r rsz8BaseSemaphoreTests.test_try_acquire_contended..frKFrTr)rr;r r$rNrrIr rr rJs  z-BaseSemaphoreTests.test_try_acquire_contendedcCs|d}|jt|jddd||jdd||jdd||jdd|||jddt}||jddt|}| |ddS)NrpF?r\g{Gzt?r^) rrVrdr;rBrHr?rr_r2)rrtrr r r test_acquire_timeouts  z'BaseSemaphoreTests.test_acquire_timeoutcsT|fdd}t|d}|t||j|dS)NcsdSr rLr rr r rsz0BaseSemaphoreTests.test_default_value..frG) rr;r r"r rHrr?r$rrr rr test_default_values   z%BaseSemaphoreTests.test_default_valuecsbddfdd }|dt|tddS)Nrpc s|dd(d|r<|Wdn1sP0YWdn1sn0YdSrA)rBr;r?rHrSrr r rUsz+BaseSemaphoreTests.test_with.._withF)N)rrBr;r?rVrW)rrUr rr rXs zBaseSemaphoreTests.test_withN)r'r(r)r*r7rr=rRrrCrJrrrXr r r r rys %   rc@seZdZdZddZdS)SemaphoreTestsz) Tests for unbounded semaphores. cCs.|d}||||dSNrG)rr?r;rr r r r}s  z&SemaphoreTests.test_release_unacquiredNr'r(r)r*r}r r r r rsrc@seZdZdZddZdS)BoundedSemaphoreTestsz' Tests for bounded semaphores. cCs8|}|t|j|||t|jdSr )rrVrdr?r;rr r r r}*s z-BoundedSemaphoreTests.test_release_unacquiredNrr r r r r%src@seZdZdZdZdZddZddZdd Zd d Z d"d dZ ddZ ddZ ddZ ddZddZddZddZddZdd Zd!S)# BarrierTestsz$ Tests for Barrier objects. rKg@cCs|j|j|jd|_dS)Nr\) barriertyperPdefaultTimeoutbarrierr!r r r r-:szBarrierTests.setUpcCs|jdSr )rabortr!r r r r/<szBarrierTests.tearDowncCs"t||jd}||dSr)r rPr$rrr r r run_threads?szBarrierTests.run_threadscCs|jj}|||jt|D]h}|dd|t|d|||j|dd|t|d|d||jq||jjd| |jj dS)NrTrG) rpartiesrNrPrrr r n_waitingrHbroken)rrcrmrr r r multipassDs   zBarrierTests.multipassrGcs&gggfdd}|dS)z; Test that a barrier is passed in lockstep csdSr )rr passesrcrr r rVsz$BarrierTests.test_barrier..fNr)rrrr rr test_barrierQszBarrierTests.test_barriercCs |dS)zC Test that a barrier works for 10 consecutive runs r)rr!r r r test_barrier_10ZszBarrierTests.test_barrier_10cs:gfdd}|tttjdS)z9 test the return value from barrier.wait csj}|dSr )rrr)rrcrr r res z(BarrierTests.test_wait_return..fN)rrNsumrrPrIr rr test_wait_return`s zBarrierTests.test_wait_returncs<gfdd}j|fdd}|dS)z, Test the 'action' callback csddSr%)rr )rcr r actionqsz(BarrierTests.test_action..actioncstddSr)rrNr r rrcrr r rtsz#BarrierTests.test_action..fNrrPr)rrrr rr test_actionls  zBarrierTests.test_actioncsZggfdd}|tdtjdjjdS)zK Test that an abort will put the barrier in a broken state csrz4j}|jdkrtjdWn8tjyRdYntyljYn0dSNrpT)rrrPr|rrBrokenBarrierErrorrrrrrr r rs    z"BarrierTests.test_abort..frrGN)rrNr rPrBrrrIr rr test_abortzs zBarrierTests.test_abortcsdgggfdd}|tdtjdtjdS)zL Test that a 'reset' on a barrier frees the waiting threads csj}|jdkrBjjjdkr6tdqjn8zjdWntj yxdYn0jddS)NrprGgMbP?T) rrrPrrrresetrrrrrrresults3rr r rs     z"BarrierTests.test_reset..frrGN)rrNr rPrIr rr test_resets zBarrierTests.test_resetcsrgggjfdd}|tdtjdtjdS)zF Test that a barrier can be reset after being broken. csz4j}|jdkrtjdWn8tjyRdYntyljYn0jdkrjjddSr) rrrPr|rrrrrrZbarrier2rrrrr r rs       z,BarrierTests.test_abort_and_reset..frrGN)rrPrrNr rIr rr test_abort_and_resets  z!BarrierTests.test_abort_and_resetcsfdd}|dS)z$ Test wait(timeout) cs:j}|jdkr"tdtjjjddS)Nrprr^)rrrPrrrVrrrr!r r rs   z$BarrierTests.test_timeout..fNrrIr r!r rfs zBarrierTests.test_timeoutcs,jjddfdd}|dS)z4 Test the barrier's default timeout g333333?r\cs4}|jdkr tdtjjdS)Nrpr)rrPrrrVrrrrrr r rs z,BarrierTests.test_default_timeout..fNrrIr rr test_default_timeoutsz!BarrierTests.test_default_timeoutcCs|d}||dSr)rr)rrQr r r test_single_threads zBarrierTests.test_single_threadN)rG)r'r(r)r*rPrr-r/rrrrrrrrrrfrrr r r r r3s"  "r)r*osrkrr_threadrrrZunittestrgtestrZ skipUnlesshasattrrzr objectr ZTestCaser+r3rmr{rrrrrrr r r r s6  1 DC_0