a 5êdgt!ã@sÜddlZddlZddlZddlmZddlZddlZddlZddlm Z dZ dZ dZ e  ¡Zdd„ZGd d „d ejƒZGd d „d eƒZGd d„dƒZGdd„deƒZGdd„de jƒZGdd„dejƒZedkrØe ¡dS)éN)Úsupport)Ú lock_testsé ég{®Gáz„?cCs6tjr2tt|ƒWdƒn1s(0YdS©N)rÚverboseÚ _print_mutexÚprint)Úarg©r ú,/usr/local/lib/python3.9/test/test_thread.pyÚ verbose_printsr c@seZdZdd„ZdS)ÚBasicThreadTestcCsZt ¡|_|j ¡t ¡|_t ¡|_d|_d|_d|_t   ¡}|j t j g|¢RŽdS©Nr) ÚthreadÚ allocate_lockÚ done_mutexÚacquireÚ running_mutexÚ random_mutexÚcreatedÚrunningÚ next_identrZthreading_setupZ addCleanupZthreading_cleanup)ÚselfÚkeyr r r ÚsetUps    zBasicThreadTest.setUpN)Ú__name__Ú __module__Ú __qualname__rr r r r rsrc@sVeZdZdd„Zdd„Zdd„Zdd„Ze e j d vd ¡d d „ƒZ d d„Z dd„Z dS)ÚThreadRunningTestscCst|jZ|jd7_td|jƒt |j|jf¡|jd7_|jd7_Wdƒn1sf0YdS)Nézcreating task %s)rrr rÚstart_new_threadÚtaskrr©rr r r Únewtask)s zThreadRunningTests.newtaskcCs¶|jt ¡d}Wdƒn1s(0Ytd|t|dƒfƒt |¡td|ƒ|j<|jd8_|jt kr”|jdkr”|j   ¡Wdƒn1s¨0YdS)NçˆÃ@útask %s will run for %sus瀄.Az task %s doner r) rÚrandomr ÚroundÚtimeÚsleeprrrÚNUMTASKSrÚrelease)rÚidentÚdelayr r r r"1s*  zThreadRunningTests.taskcCs\t ¡@ttƒD] }| ¡qtdƒ|j ¡tdƒWdƒn1sN0YdS)Nz waiting for tasks to complete...úall tasks done)rÚwait_threads_exitÚranger,r$r rr©rÚir r r Útest_starting_threads<s     z(ThreadRunningTests.test_starting_threadscCs2| t ¡dd¡t d¡| t ¡dd¡dS)Nrzinitial stack size is not 0zstack_size not reset to default)Ú assertEqualrÚ stack_sizer#r r r Útest_stack_sizeEs z"ThreadRunningTests.test_stack_size)ÚntÚposixztest meant for nt and posixc Cszt d¡Wn6ty(tdƒYntjyD| d¡Yn0d}dD]0}t |¡| t ¡|||¡td|ƒqNdD]t}td|ƒd |_d |_t   ¡@t t ƒD] }|  ¡q²td ƒ|j ¡td ƒWdƒq„1sî0Yq„t d ¡dS) Niz3caught expected ValueError setting stack_size(4096)z4platform does not support changing thread stack sizez&stack_size(%d) failed - should succeed)éérzsuccessfully set stack_size(%d))r;r<ztrying stack_size = (%d)rz!waiting for all tasks to completer0)rr7Ú ValueErrorr ÚerrorZskipTestr6rrrr1r2r,r$rr)rZfail_msgZtssr4r r r Útest_nt_and_posix_stack_sizeLs,        (z/ThreadRunningTests.test_nt_and_posix_stack_sizecsÈt ¡}t ¡‰ˆ ¡g‰‡‡fdd„}t ¡‚t |d¡ˆsPt t ¡q@|  t ¡|d¡ˆ  ¡g‰t   |‡fdd„¡}~ˆs–t t ¡q†|  t ¡|¡Wdƒn1sº0YdS)Ncsˆ d¡ˆ ¡ˆ ¡dSr)Úappendrr-r )ÚmutÚstartedr r r"rs z,ThreadRunningTests.test__count..taskr r cs ˆ d¡Sr)r@)Ú_)Údoner r Ú‚óz0ThreadRunningTests.test__count..)rÚ_countrrrr1r!r*r+Ú POLL_SLEEPr6r-ÚweakrefÚref)rZorigr"Úwrr )rDrArBr Ú test__countks"    zThreadRunningTests.test__countc sƇfdd„}t ¡‰t ¡–}t ¡,ˆ ¡t |d¡ˆ ¡Wdƒn1sX0Y| t|j j ƒd¡|  |j j |¡| |j j d¡| |j j¡Wdƒn1s¸0YdS)Ncsˆ ¡tdƒ‚dS)Nú task failed)r-r=r ©rBr r r"‰sz:ThreadRunningTests.test_unraisable_exception..taskr rMz&Exception ignored in thread started by)rrrZcatch_unraisable_exceptionr1rr!r6ÚstrZ unraisableÚ exc_valueZassertIsÚobjectÚerr_msgÚassertIsNotNoneÚ exc_traceback)rr"Úcmr rNr Útest_unraisable_exceptionˆs    & ÿz,ThreadRunningTests.test_unraisable_exceptionN)rrrr$r"r5r8ÚunittestZskipIfÚosÚnamer?rLrVr r r r r's   rc@seZdZdd„Zdd„ZdS)ÚBarriercCs.||_d|_t ¡|_t ¡|_|j ¡dSr)Ú num_threadsÚwaitingrrÚ checkin_mutexÚcheckout_mutexr)rr[r r r Ú__init__œs   zBarrier.__init__cCs‚|j ¡|jd|_|j|jkr<|jd|_|j ¡dS|j ¡|j ¡|jd|_|jdkrt|j ¡dS|j ¡dS)Nr r)r]rr\r[r^r-r#r r r Úenter£s          z Barrier.enterN)rrrr_r`r r r r rZ›srZc@seZdZdd„Zdd„ZdS)Ú BarrierTestcCstt ¡Xttƒ|_t|_ttƒD]}t |j |f¡q"t dƒ|j   ¡t dƒWdƒn1sf0YdS)Nzwaiting for tasks to endz tasks done) rr1rZr,Úbarrr2rr!Útask2r rrr3r r r Ú test_barrier¶s    zBarrierTest.test_barrierc CsættƒD]Œ}|dkrd}n2|jt ¡d}Wdƒn1sB0Ytd|t|dƒfƒt |¡td||fƒ|j  ¡td|ƒq|j (|j d8_ |j dk}Wdƒn1sÊ0Y|râ|j   ¡dS)Nrr%r&r'ztask %s entering %sztask %s leaving barrierr )r2ÚNUMTRIPSrr(r r)r*r+rbr`rrrr-)rr.r4r/Úfinishedr r r rcÀs" *ÿ  (zBarrierTest.task2N)rrrrdrcr r r r ra´s rac@seZdZejZdS)Ú LockTestsN)rrrrrZlocktyper r r r rgÙsrgc@s<eZdZdd„Ze eedƒd¡ej dd„ƒƒZ dd„Z d S) ÚTestForkInThreadcCst ¡\|_|_dSr)rXÚpipeÚread_fdÚwrite_fdr#r r r rÞszTestForkInThread.setUpÚforkz need os.forkcsŠd‰‡fdd„}t ¡Ft ||j|jf¡| t |jd¡d¡t  |j¡Wdƒn1sd0Y|  ˆ¡tj ˆdddS)Nc sFt ¡‰ˆrdSz$t |¡t |d¡Wt d¡n t d¡0dS)NóOKr)rXrlÚcloseÚwriteÚ_exit)rjrk©Úpidr r Ú fork_threadæs z7TestForkInThread.test_forkinthread..fork_threadérmr)Úexitcode) rr1rr!rjrkr6rXÚreadrnrSZ wait_process)rrsr rqr Útest_forkinthreadás  * z"TestForkInThread.test_forkinthreadcCsLzt |j¡Wnty"Yn0zt |j¡WntyFYn0dSr)rXrnrjÚOSErrorrkr#r r r ÚtearDownþs  zTestForkInThread.tearDownN) rrrrrWZ skipUnlessÚhasattrrXrZ reap_threadsrwryr r r r rhÝs  rhÚ__main__)rXrWr(ÚtestrÚ_threadrr*rIrr,rerHrrr ZTestCaserrrZrargrhrÚmainr r r r Ús(  t%-