a zeNx@s$ddlZddlZddlZddlZddlmZmZddlZddlZddl Z ddl m Z e e eddZddZGdd d eZGd d d ejZGd d d eZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZdS)N)start_new_thread TIMEOUT_MAX)supportforkz9platform doesn't support fork (no _at_fork_reinit method)cCstddS)N{Gz?)timesleepr r C/opt/bitninja-python-dojo/embedded/lib/python3.9/test/lock_tests.py_waitsr c@s.eZdZd ddZddZddZdd Zd S) BunchFcsx_|_g_g_| _t_jfdd}zt |D]}t |dqLWnd_Yn0dS)Nc sZt}j|z$Wj|jsVtq*nj|jsTtqF0dSN) threading get_identstartedappendfinished _can_exitr )tidfselfr r task,s   zBunch.__init__..taskr T) 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__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.r1r r r r r*Ksr*c@steZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZdS) BaseLockTestscCs|}~dSr )locktyperlockr r r test_constructoraszBaseLockTests.test_constructorcCs|}|t|d~dS)Nz)r3 assertRegexreprr4r r r test_represzBaseLockTests.test_reprcCs&|}||t|d~dS)Nz)r3acquirer7r8r4r r r test_locked_reprjszBaseLockTests.test_locked_reprcCs|}|~dSr )r3r:r4r r r test_acquire_destroypsz"BaseLockTests.test_acquire_destroycCs|}||~dSr r3r:releaser4r r r test_acquire_releaseusz"BaseLockTests.test_acquire_releasecCs$|}||d|dSNF)r3 assertTruer:r>r4r r r test_try_acquire{szBaseLockTests.test_try_acquirecsJ|gfdd}t|d|ddS)NcsddSr@rr:r r5resultr r rsz3BaseLockTests.test_try_acquire_contended..fr)r3r:r r$ assertFalser>rrr rDr test_try_acquire_contendedsz(BaseLockTests.test_try_acquire_contendedcsp|d}fdd}t||}|t|t|jd| |t|j|dS)NcsdSr r:r>r r5r r rsz/BaseLockTests.test_acquire_contended..fr) r3r:r r"r assertEqualr rr>r$rNrbr rLr test_acquire_contendeds  z$BaseLockTests.test_acquire_contendedcsV|fdd}dfdd }|t|d|t|tt|ddS)NcsdSr rKr rLr r rsz"BaseLockTests.test_with..fcs4|dur|Wdn1s&0YdSr r errrLr r _withsz&BaseLockTests.test_with.._withrF)N)r3r r$ assertRaises TypeError)rrrTr rLr test_withs zBaseLockTests.test_withcs`|fdd}tt}t|dtt|kr\td||ttdS)NcsdSr rKr rLr r rsz)BaseLockTests.test_thread_leak..fg?) r3r r enumerater r$rrrM)rrrr rLr test_thread_leaks   zBaseLockTests.test_thread_leakcs||tjdd|jtjdd|jtjdd|jtjtddjtdt}| jddt}| ||dgfdd}t |d | d |dd dS) NFrFitimeoutg}Ô%ITrJcs4t}jddt}||dS)N?r[)r monotonicrr:)t1t2r5resultsr r rsz%BaseLockTests.test_timeout..frr])r3rU ValueErrorr: OverflowErrorrr>rr^rAr/r r$rGr1)rr_r`rr rar test_timeouts  zBaseLockTests.test_timeoutcCs"|}t|}||dSr )r3weakrefrefZassertIsNotNonerr5rgr r r test_weakref_existss z!BaseLockTests.test_weakref_existscCs,|}t|}~t||dSr )r3rfrggcZcollectZ assertIsNonerhr r r test_weakref_deleteds  z"BaseLockTests.test_weakref_deletedN)r'r(r)r6r9r;r<r?rBrIrQrWrZrerirkr r r r r2\s r2c@s0eZdZddZddZddZeddZd S) LockTestscs|gfdd}tpt|dtdkrBtq.t|tdtdkrttq`|tdWdn1s0YdS)Ncs(dddSr r:rr r5Zphaser r rs z#LockTests.test_reacquire..fr rrF)r3rrrr r rMr>rHr rnr test_reacquires    zLockTests.test_reacquirecsB|fdd}t|d}|dS)Ncs dSr )r>r rLr r rsz*LockTests.test_different_thread..frF)r3r:r r$r>rrrPr rLr test_different_threads  zLockTests.test_different_threadcCsN|}|||jdd|||||jdddS)Nrr[F)blocking)r3r:rGr>lockedrAr4r r r test_state_after_timeout s z"LockTests.test_state_after_timeoutcCsDdd}|}||||}||||dS)NcSs||dSr rKrLr r r use_locksz/LockTests.test_at_fork_reinit..use_lock)r3_at_fork_reinitr:)rrvr5Zlock2r r r test_at_fork_reinitszLockTests.test_at_fork_reinitN)r'r(r)rprrru requires_forkrxr r r r rls   rlc@s4eZdZddZddZddZddZd d Zd S) RLockTestscCs<|}||||||dSr r=r4r r r rp,szRLockTests.test_reacquirecCsX|}|t|j|||||||t|jdSr )r3rU RuntimeErrorr>r:r4r r r test_release_unacquired5sz"RLockTests.test_release_unacquiredcCsX|}|t|j|||||||t|jdSr )r3rUr{ _release_saver:r>r4r r r test_release_save_unacquiredAsz'RLockTests.test_release_save_unacquiredcsR|fdd}t|dd}z|tjW|n |0|dS)Ncs dSr )r:r rLr r rPsz+RLockTests.test_different_thread..frFT)r3r rUr{r>r&r$rqr rLr rrMs  z RLockTests.test_different_threadcs||||gfdd}t|d|d||dS)NcsdSr )r _is_ownedr rDr r rasz$RLockTests.test__is_owned..frFr)r3rGrr:rAr r$r>rHr rDr test__is_ownedYszRLockTests.test__is_ownedN)r'r(r)rpr|r~rrrr r r r rz(s     rzc@s@eZdZddZddZddZddZd d Zed d Z d S) EventTestscCsr|}||||||||||||||dSr ) eventtyperGis_setsetrAclearrevtr r r test_is_setpszEventTests.test_is_setcs|d}ggfdd}t||}|t|td||dg||dg|dS)NrJcs dSr rwaitr rresults1results2r r rsz#EventTests._check_notify..frT)r r"r rMr rr$)rrrOrrPr 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)NrJcs@dt}d}t}|||fdS)Ngr])rrrr^)r_rr`rr r rs  z"EventTests.test_timeout..fFr]T)rr r$rMrGr1rrA)rrOrrdtr rr res"   zEventTests.test_timeoutcsn|gdd}fdd}t||}|t||dg|dS)Ng?rJcsddSNrr rrbr\r r rsz(EventTests.test_set_and_clear..fT) rr r"rrrrr$rMrNr rr test_set_and_clears  zEventTests.test_set_and_clearcCs|}|j"||jdWdn1s60Y||j"||jdWdn1sv0YdSr@)r_condrGr:rwrr r r rxs 0zEventTests.test_at_fork_reinitN) r'r(r)rrrrerryrxr r r r rks rc@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)ConditionTestscCs|}||||t}||}|||d|||d||d|| ||dWdn1s0YdSr@)condtyper:r>rLockrGrA)rcondr5r r r test_acquires zConditionTests.test_acquirecCs|}|t|jdSr )rrUr{rrrr r r test_unacquired_waitsz#ConditionTests.test_unacquired_waitcCs|}|t|jdSr )rrUr{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) NrJrcsd}|f}|fdSr )r:rrr>rEr phase_numreadyrrr r rs  z'ConditionTests._check_notify..frF)TrFro)Tro)Tr) r r"r r rrMr:rr> notify_allr$)rrrOrrPr rr rsX           zConditionTests._check_notifycCs |}||||dSr )rrrr r r r4s zConditionTests.test_notifycsd|gd}fdd}t|||t|D]\}}||d||q@dS)NrJcs@t}d}t}|||fdS)Nr])r:rr^rr>r)r_rEr`rrbr r r>s  z&ConditionTests.test_timeout..fr])rr r$rMr r1rG)rrOrrrEr rr re:s  zConditionTests.test_timeoutc sdfdd}t|d}|tdD]B}td d7Wdq61sn0Yq6|dS)NrcsP8fdd}|dWdn1sB0YdS)NcsdkSrr r stater r Uz8ConditionTests.test_waitfor..f..r)wait_forrArMrrrrr r rSs z&ConditionTests.test_waitfor..frFrr)rr r"rrrrr$rrrPrr 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^rrGr1r)rrErrrsuccessr r res   z.ConditionTests.test_waitfor_timeout..frFrr) rr r"rrrrr$rMr rr rr test_waitfor_timeoutas   (z#ConditionTests.test_waitfor_timeoutN) r'r(r)rrrrrrerrr r r r rsJrc@s\eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)BaseSemaphoreTestscCs,|jt|jdd|jt|jtj ddS)N)value)rUrcsemtypesysmaxsizer!r r r r6~sz#BaseSemaphoreTests.test_constructorcCsH|d}|||d}||||dS)NrFro)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 rCr rrrrZ sem_resultsr r rs z4BaseSemaphoreTests.test_acquire_contended..frF roFT) rr:r r"r r rMrr>sortedrGr$)rrOrrPrr rr rQs:    $  .z)BaseSemaphoreTests.test_acquire_contendedcs>|dggdfdd}t|d}|ttdkr^tqB|dgdddttdkrtq|tdgddgdd dttd krtq|tdgddgdd gd| d | dS) Nrrcs(dSr rmr rrrrr r rs z/BaseSemaphoreTests.test_multirelease..frrrFrrorF) rr:r r"r r rMr>rrGr$rqr rr test_multireleases0   $ .z$BaseSemaphoreTests.test_multireleasecCsV|d}||d||d||d|||ddS)NroF)rrAr:rGr>rr r r rBs  z#BaseSemaphoreTests.test_try_acquirecsV|dgfdd}t|d|tdgddgddS) Nrcs$dddSr@rCr rbrr r rsz8BaseSemaphoreTests.test_try_acquire_contended..frJFrTr)rr:r r$rMrrHr rr rIs  z-BaseSemaphoreTests.test_try_acquire_contendedcCs|d}|jt|jddd||jdd||jdd||jdd|||jddt}||jddt|}| |ddS)NroF?r[g{Gzt?r]) rrUrcr:rArGr>rr^r1)rrtrr r r test_acquire_timeouts  z'BaseSemaphoreTests.test_acquire_timeoutcsT|fdd}t|d}|t||j|dS)NcsdSr rKr rr r rsz0BaseSemaphoreTests.test_default_value..frF) rr:r r"r rGrr>r$rqr rr test_default_values   z%BaseSemaphoreTests.test_default_valuecsbddfdd }|dt|tddS)Nroc s|dd(d|r<|Wdn1sP0YWdn1sn0YdSr@)rAr:r>rGrRrr r rTsz+BaseSemaphoreTests.test_with.._withF)N)rrAr:r>rUrV)rrTr rr rWs zBaseSemaphoreTests.test_withN) r'r(r)r6rr<rQrrBrIrrrWr r r r rys %   rc@seZdZddZdS)SemaphoreTestscCs.|d}||||dSNrF)rr>r:rr r r r|s  z&SemaphoreTests.test_release_unacquiredNr'r(r)r|r r r r rsrc@seZdZddZdS)BoundedSemaphoreTestscCs8|}|t|j|||t|jdSr )rrUrcr>r:rr r r r|*s z-BoundedSemaphoreTests.test_release_unacquiredNrr r r r r%src@seZdZdZdZddZddZddZd d Zd!d d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd S)" BarrierTestsrJg@cCs|j|j|jd|_dS)Nr[) barriertyperOdefaultTimeoutbarrierr!r r r r,:szBarrierTests.setUpcCs|jdSr )rabortr!r r r r.<szBarrierTests.tearDowncCs"t||jd}||dSr)r rOr$rqr r r run_threads?szBarrierTests.run_threadscCs|jj}|||jt|D]h}|dd|t|d|||j|dd|t|d|d||jq||jjd| |jj dS)NrTrF) rpartiesrMrOrrr r n_waitingrGbroken)rrbrmrr r r multipassDs   zBarrierTests.multipassrFcs&gggfdd}|dS)NcsdSr )rr passesrbrr r rVsz$BarrierTests.test_barrier..fr)rrrr rr test_barrierQszBarrierTests.test_barriercCs |dS)Nr)rr!r r r test_barrier_10ZszBarrierTests.test_barrier_10cs:gfdd}|tttjdS)Ncsj}|dSr )rrr)rrbrr r res z(BarrierTests.test_wait_return..f)rrMsumrrOrHr rr test_wait_return`s zBarrierTests.test_wait_returncs<gfdd}j|fdd}|dS)NcsddSr%)rr )rbr r actionqsz(BarrierTests.test_action..actioncstddSr)rrMr r rrbrr r rtsz#BarrierTests.test_action..frrOr)rrrr rr test_actionls  zBarrierTests.test_actioncsZggfdd}|tdtjdjjdS)Ncsrz4j}|jdkrtjdWn8tjyRdYntyljYn0dSNroT)rrrOr{rrBrokenBarrierErrorrrrrrr r rs    z"BarrierTests.test_abort..frrF)rrMr rOrArrrHr rr test_abortzs zBarrierTests.test_abortcsdgggfdd}|tdtjdtjdS)Ncsj}|jdkrBjjjdkr6tdqjn8zjdWntj yxdYn0jddS)NrorFgMbP?T) rrrOrrrresetrrrrrrresults3rr r rs     z"BarrierTests.test_reset..frrF)rrMr rOrHr rr test_resets zBarrierTests.test_resetcsrgggjfdd}|tdtjdtjdS)Ncsz4j}|jdkrtjdWn8tjyRdYntyljYn0jdkrjjddSr) rrrOr{rrrrrrZbarrier2rrrrr r rs       z,BarrierTests.test_abort_and_reset..frrF)rrOrrMr rHr rr test_abort_and_resets  z!BarrierTests.test_abort_and_resetcsfdd}|dS)Ncs:j}|jdkr"tdtjjjddS)Nrorr])rrrOrrrUrrrr!r r rs   z$BarrierTests.test_timeout..frrHr r!r res zBarrierTests.test_timeoutcs,jjddfdd}|dS)Ng333333?r[cs4}|jdkr tdtjjdS)Nror)rrOrrrUrrrrrr r rs z,BarrierTests.test_default_timeout..frrHr rr test_default_timeoutsz!BarrierTests.test_default_timeoutcCs|d}||dSr)rr)rrPr r r test_single_threads zBarrierTests.test_single_threadN)rF)r'r(r)rOrr,r.rrrrrrrrrrerrr r r r r3s   "r)osrjrr_threadrrrZunittestrftestrZ skipUnlesshasattrryr objectr ZTestCaser*r2rlrzrrrrrrr r r r s4  1 DC_0