a 5êdgdQã@sôddlZddlZddlZddlZddlZddlZddlmZejddgdZ ejddgdZ e  e d¡Z dZ d d „ZGd d „d ejƒZGd d„dƒZGdd„deƒZGdd„deƒZGdd„deejƒZe Gdd„deejƒƒZGdd„deƒZGdd„deejƒZe Gdd„deejƒƒZGdd„deƒZGdd „d eejƒZe Gd!d"„d"eejƒƒZGd#d$„d$eƒZGd%d&„d&eƒZGd'd(„d(eejƒZ e Gd)d*„d*eejƒƒZ!Gd+d,„d,ƒZ"Gd-d.„d.e"ejƒZ#e Gd/d0„d0e"ejƒƒZ$e%d1krðe &¡dS)2éN)ÚsupportÚqueueÚ_queue)Zblocked)ZfreshzNo _queue module foundécCs|jdko| ¡|jkS©Nr)ÚmaxsizeÚqsize)Úq©r ú+/usr/local/lib/python3.9/test/test_queue.pyÚqfullsr c@seZdZdd„Zdd„ZdS)Ú_TriggerThreadcCs&||_||_t ¡|_tj |¡dS©N)ÚfnÚargsÚ threadingÚEventÚ startedEventÚThreadÚ__init__)Úselfrrr r r rs z_TriggerThread.__init__cCs$t d¡|j ¡|j|jŽdS)Nçš™™™™™¹?)ÚtimeÚsleeprÚsetrr©rr r r Úruns  z_TriggerThread.runN)Ú__name__Ú __module__Ú __qualname__rrr r r r r sr c@seZdZdd„Zdd„ZdS)ÚBlockingTestMixinc CsXt||ƒ}| ¡z4||Ž|_|j ¡s6| d|¡|jWt |¡St |¡0dS)Nz*blocking function %r appeared not to block)r ÚstartÚresultrÚis_setÚfailrÚ join_thread)rÚ block_funcÚ block_argsÚ trigger_funcÚ trigger_argsÚthreadr r r Údo_blocking_test7s   ÿ þz"BlockingTestMixin.do_blocking_testc CsŠt||ƒ}| ¡zRz ||ŽWn|y4‚Yn0| d|¡Wt |¡|j ¡s†| d¡n t |¡|j ¡s„| d¡0dS)Nzexpected exception of kind %rz(trigger thread ended but event never set)r r!r$rr%rr#)rr&r'r(r)Zexpected_exception_classr*r r r Údo_exceptional_blocking_testEs    ÿ   þ  z.BlockingTestMixin.do_exceptional_blocking_testN)rrrr+r,r r r r r 5sr c@s\eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dS)ÚBaseQueueTestMixincCsd|_t ¡|_dSr)ÚcumrÚLockÚcumlockrr r r ÚsetUpXszBaseQueueTestMixin.setUpcCsn| ¡rtdƒ‚| | ¡¡| | ¡¡| d¡| d¡| d¡tgd¢gd¢gd¢d}| ¡| ¡| ¡g}|  |||j j d ¡t t d ƒD]}| |¡| | ¡d ¡qœ| t|ƒ d ¡d t }dt }| |¡| t|ƒd¡| | ¡¡| | ¡¡z|j|dd| d¡Wn|jjyHYn0z|j|dd| d¡Wn|jjy~Yn0| |j|f|jd¡| |j|ddf|jd¡t t ƒD]}| ¡q¸| | ¡ d¡z|jdd| d¡Wn|jjy Yn0z|jdd| d¡Wn|jjy@Yn0| |jd|jd¡| |jd|jd¡dS)Nú&Call this function with an empty queueéoéMéÞ)r3r4r5)r5r4r3)r3r5r4)ÚQueueÚ LifoQueueÚ PriorityQueuez&Didn't seem to queue the correct data!éúQueue should not be emptyúQueue should not be fullééúQueue should be fullr©Úblockz(Didn't appear to block with a full queueg{®Gáz„?©Útimeoutz+Didn't appear to time-out with a full queuer Té úQueue should be emptyz*Didn't appear to block with an empty queuez-Didn't appear to time-out with an empty queue©Úempty)TrC)rÚ RuntimeErrorÚ assertTruerFÚ assertFalseÚfullÚputÚdictÚgetÚ assertEqualÚ __class__rÚrangeÚ QUEUE_SIZEr r$rÚFullr+ÚEmpty)rr Z target_orderZ actual_orderÚiÚlastrJr r r Úbasic_queue_test\sh   þÿ      z#BaseQueueTestMixin.basic_queue_testcCs^| ¡}|dkr| ¡dS|j|j|7_Wdƒn1sF0Y| ¡qdSr)rMÚ task_doner0r.)rr Úxr r r Úworker•s,zBaseQueueTestMixin.workercCs¢d|_g}dD](}tj|j|fd}| ¡| |¡qtdƒD]}| |¡q@| ¡|  |jt tdƒƒd¡dD]}| d¡qt| ¡|D] }| ¡qdS)Nr)rr9©Útargetrédz0q.join() did not block until all tasks were doneéÿÿÿÿ) r.rrrYr!ÚappendrPrKÚjoinrNÚsum)rr ÚthreadsrTr*r r r Úqueue_join_testŸs"   ÿ z"BaseQueueTestMixin.queue_join_testcCs6| ¡}z | ¡Wnty&Yn 0| d¡dS©Nz(Did not detect task count going negative)Ú type2testrWÚ ValueErrorr$©rr r r r Útest_queue_task_done±s   z'BaseQueueTestMixin.test_queue_task_donecCsJ| ¡}| |¡| |¡z | ¡Wnty:Yn 0| d¡dSrc)rdrbrWrer$rfr r r Útest_queue_join»s    z"BaseQueueTestMixin.test_queue_joincCs"| t¡}| |¡| |¡dSr)rdrQrVrfr r r Ú test_basicÈs  zBaseQueueTestMixin.test_basiccCs~| t¡}| t¡|jdddWdƒn1s80Y| t¡|jdddWdƒn1sp0YdS©Nr9r]rA)rdrQÚ assertRaisesrerKrMrfr r r Ú&test_negative_timeout_raises_exceptionÏs   , z9BaseQueueTestMixin.test_negative_timeout_raises_exceptioncCsª| t¡}ttƒD]}| d¡q| |jj¡| d¡Wdƒn1sP0YttƒD] }| ¡qb| |jj¡| ¡Wdƒn1sœ0YdS)Nr9) rdrQrPÚ put_nowaitrkrrRÚ get_nowaitrS©rr rTr r r Ú test_nowaitÖs   (  zBaseQueueTestMixin.test_nowaitcCs²| d¡}| d¡| d¡| d¡| |jj¡| d¡Wdƒn1sV0Y| | ¡d¡d|_| |jj¡| d¡Wdƒn1s¤0YdS)Nér9r<é) rdrKrkrrRrmrNrrrfr r r Útest_shrinking_queueâs    (z'BaseQueueTestMixin.test_shrinking_queueN) rrrr1rVrYrbrgrhrirlrprsr r r r r-Ws9    r-cseZdZ‡fdd„Z‡ZS)Ú QueueTestcs|jj|_tƒ ¡dSr)rr6rdÚsuperr1r©rOr r r1ñs zQueueTest.setUp©rrrr1Ú __classcell__r r rvr rtïsrtc@seZdZeZdS)Ú PyQueueTestN©rrrÚpy_queuerr r r r ryõsryc@seZdZeZdS)Ú CQueueTestN©rrrÚc_queuerr r r r r|ùsr|cseZdZ‡fdd„Z‡ZS)Ú LifoQueueTestcs|jj|_tƒ ¡dSr)rr7rdrur1rrvr r r1s zLifoQueueTest.setUprwr r rvr rþsrc@seZdZeZdS)ÚPyLifoQueueTestNrzr r r r r€sr€c@seZdZeZdS)ÚCLifoQueueTestNr}r r r r r srcseZdZ‡fdd„Z‡ZS)ÚPriorityQueueTestcs|jj|_tƒ ¡dSr)rr8rdrur1rrvr r r1s zPriorityQueueTest.setUprwr r rvr r‚sr‚c@seZdZeZdS)ÚPyPriorityQueueTestNrzr r r r rƒsrƒc@seZdZeZdS)ÚCPriorityQueueTestNr}r r r r r„sr„c@s eZdZdS)ÚFailingQueueExceptionN©rrrr r r r r…ór…cs,eZdZ‡fdd„Zdd„Zdd„Z‡ZS)ÚFailingQueueTestcs0|jj‰G‡fdd„dˆƒ}||_tƒ ¡dS)Ncs0eZdZ‡fdd„Z‡fdd„Z‡fdd„ZdS)z,FailingQueueTest.setUp..FailingQueuecs"d|_d|_ˆj|g|¢RŽdS)NF)Ú fail_next_putÚ fail_next_getr)rr©r6r r r(sz5FailingQueueTest.setUp..FailingQueue.__init__cs |jrd|_tdƒ‚ˆ ||¡S©NFzYou Lose)r‰r…Ú_put)rÚitemr‹r r r,sz1FailingQueueTest.setUp..FailingQueue._putcs|jrd|_tdƒ‚ˆ |¡SrŒ)rŠr…Ú_getrr‹r r r1sz1FailingQueueTest.setUp..FailingQueue._getN)rrrrrrr r‹r r Ú FailingQueue's  r)rr6rrur1)rrrvr‹r r1#szFailingQueueTest.setUpcCsÞ| ¡rtdƒ‚ttdƒD]}| |¡qd|_z|jddd| d¡Wnty`Yn0d|_z|jddd | d¡Wnty–Yn0| d ¡| t |ƒd ¡d|_z"|  |jd |j d ¡| d¡WntyìYn0| d ¡d|_z$|  |jd|j d t¡| d¡Wnty6Yn0| d ¡| t |ƒd ¡|  ¡| t |ƒ d¡| d ¡| t |ƒd ¡|  |jd |j d ¡ttƒD]}|  ¡q¢| | ¡ d¡| d¡d|_ z|  ¡| d¡WntyþYn0| | ¡d¡d|_ z|j dd | d¡WntyDYn0| | ¡d¡|  ¡| | ¡ d¡d|_ z$|  |j d |jdt¡| d¡Wnty®Yn0| | ¡d¡|  ¡| | ¡ d¡dS)Nr2r9TZoopsrr?z)The queue didn't fail when it should haverrArUr>)rJr )rJTrCr;rDÚfirstr:rE)rrGrPrQrKr‰r$r…rHr r+rMr,rŠror r r Úfailing_queue_test;sŽ      ÿ      ÿz#FailingQueueTest.failing_queue_testcCs"| t¡}| |¡| |¡dSr)rrQr’rfr r r Útest_failing_queueŒs  z#FailingQueueTest.test_failing_queue)rrrr1r’r“rxr r rvr rˆ!s Qrˆc@seZdZeZdS)ÚPyFailingQueueTestNrzr r r r r”–sr”c@seZdZeZdS)ÚCFailingQueueTestNr}r r r r r•šsr•c@steZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„ZdS)ÚBaseSimpleQueueTestcCs| ¡|_dSr)rdr rr r r r1¡szBaseSimpleQueueTest.setUpcCsPz | ¡}Wnty YdS0| |¡| ¡dkrt | ¡d¡qdS)Ngà?çü©ñÒMbP?)ÚpopÚ IndexErrorrKÚrandomrr)rr ÚseqÚrndÚvalr r r Úfeed¤s    zBaseSimpleQueueTest.feedcCs$| ¡}||krdS| |¡qdSr)rMr^©rr ÚresultsÚsentinelrr r r Úconsume®szBaseSimpleQueueTest.consumecCsRz|jdd}Wq6|jjy0t d¡Yq0q6q||krBdS| |¡qdS)NFr?çñh㈵øä>)rMrrSrrr^rŸr r r Úconsume_nonblockµsz$BaseSimpleQueueTest.consume_nonblockcCsHz|jdd}Wq,|jjy&Yq0q,q||kr8dS| |¡qdS)Nr£rA)rMrrSr^rŸr r r Úconsume_timeoutÂsz#BaseSimpleQueueTest.consume_timeoutc sÎg‰d‰|ˆg|‰ˆ ¡t d¡‰g‰‡fdd„‰‡‡‡‡‡fdd„t|ƒDƒ}‡‡‡‡‡fdd„t|ƒDƒ}t ||¡Wdƒn1s˜0Y| ˆ¡| ˆ ¡¡|  ˆ  ¡d¡ˆS)Né*cs‡‡fdd„}|S)Nc sFzˆ|i|¤ŽWn.ty@}zˆ |¡WYd}~n d}~00dSr)Ú BaseExceptionr^)rÚkwargsÚe)Ú exceptionsÚfr r ÚwrapperÙszHBaseSimpleQueueTest.run_threads..log_exceptions..wrapperr )r«r¬)rª)r«r Úlog_exceptionsØsz7BaseSimpleQueueTest.run_threads..log_exceptionscs$g|]}tjˆˆƒˆˆˆfd‘qS©rZ©rr©Ú.0rT)Ú feed_funcr­r rœr›r r Ú àsþ ÿz3BaseSimpleQueueTest.run_threads..cs$g|]}tjˆˆƒˆˆˆfd‘qSr®r¯r°)Ú consume_funcr­r r r¡r r r³ãsþ ÿr) ÚreverseršÚRandomrPrZ start_threadsrIrHrFrNr) rZ n_feedersZ n_consumersr Úinputsr²r´ZfeedersZ consumersr ) r´rªr²r­r r rœr¡r›r Ú run_threadsÏs&  þþ zBaseSimpleQueueTest.run_threadscCsþ|j}| | ¡¡| | ¡d¡| d¡| | ¡¡| | ¡d¡| d¡| d¡| d¡| | ¡¡| | ¡d¡| | ¡d¡| | ¡d¡| |  ¡d¡| | ¡d¡| |jddd¡| | ¡¡| | ¡d¡| |jdd d¡| | ¡¡| | ¡d¡|  |j j ¡|jddWdƒn1s^0Y|  |j j ¡|jd d Wdƒn1sš0Y|  |j j ¡|  ¡Wdƒn1sÒ0Y| | ¡¡| | ¡d¡dS) Nrr9r<rqrrFr?rrAr—) r rHrFrNrrKrIrmrMrnrkrrSrfr r r riðs:    ,,(zBaseSimpleQueueTest.test_basiccCsJ|j}| d¡| t¡|jddWdƒn1s<0YdSrj)r rKrkrerMrfr r r rls  z:BaseSimpleQueueTest.test_negative_timeout_raises_exceptioncCs:|j}ttdƒƒ}| dd|||j|j¡}| ||¡dS)Nr\r9)r ÚlistrPr¸ržr¢rN)rr r·r r r r Ú test_orders zBaseSimpleQueueTest.test_ordercCsBd}|j}ttdƒƒ}| |||||j|j¡}| t|ƒ|¡dS©Né2é')r r¹rPr¸ržr¢rNÚsorted©rÚNr r·r r r r Útest_many_threads$s  z%BaseSimpleQueueTest.test_many_threadscCsBd}|j}ttdƒƒ}| |||||j|j¡}| t|ƒ|¡dSr»)r r¹rPr¸ržr¤rNr¾r¿r r r Útest_many_threads_nonblock/s  ÿz.BaseSimpleQueueTest.test_many_threads_nonblockcCsBd}|j}ttdƒƒ}| |||||j|j¡}| t|ƒ|¡dS)Nr¼iè)r r¹rPr¸ržr¥rNr¾r¿r r r Útest_many_threads_timeout9s  ÿz-BaseSimpleQueueTest.test_many_threads_timeoutcCs^Gdd„dƒ}d}|j}t|ƒD]}| |ƒ¡q t|ƒD]}t | ¡¡}| |ƒ¡q:dS)Nc@s eZdZdS)z.BaseSimpleQueueTest.test_references..CNr†r r r r ÚCFsrÄé)r rPrKÚweakrefÚrefrMZ assertIsNone)rrÄrÀr rTÚwrr r r Útest_referencesCs  z#BaseSimpleQueueTest.test_referencesN)rrrr1ržr¢r¤r¥r¸rirlrºrÁrÂrÃrÉr r r r r–Ÿs   !%    r–cs eZdZeZ‡fdd„Z‡ZS)ÚPySimpleQueueTestcs|jj|_tƒ ¡dSr)rÚ_PySimpleQueuerdrur1rrvr r r1Us zPySimpleQueueTest.setUp)rrrr{rr1rxr r rvr rÊRsrÊcs0eZdZeZ‡fdd„Zdd„Zdd„Z‡ZS)ÚCSimpleQueueTestcs|jj|_tƒ ¡dSr)rÚ SimpleQueuerdrur1rrvr r r1_s zCSimpleQueueTest.setUpcCs(| |j|jj¡| |j|jj¡dSr)ZassertIsrdrrÍrr r r Útest_is_defaultcsz CSimpleQueueTest.test_is_defaultcs||j‰t ¡‰d}g}G‡‡fdd„dtƒ}|ƒ}ˆ tˆƒ¡~| ˆ ¡¡|d|kr,q`q,| |t t |dƒƒ¡dS)Nr½cs"eZdZdd„Z‡‡fdd„ZdS)z2CSimpleQueueTest.test_reentrancy..CircularcSs ||_dSr)Zcircularrr r r rssz;CSimpleQueueTest.test_reentrancy..Circular.__init__csˆ tˆƒ¡dSr)rKÚnextr©Úgenr r r Ú__del__vsz:CSimpleQueueTest.test_reentrancy..Circular.__del__N)rrrrrÒr rÐr r ÚCircularrsrÓr]r9) r Ú itertoolsÚcountÚobjectrKrÏr^rMrNr¹rP)rrÀr rÓÚor rÐr Útest_reentrancygs z CSimpleQueueTest.test_reentrancy) rrrr~rr1rÎrØrxr r rvr rÌZs rÌÚ__main__)'rÔršrrZunittestrÆÚtestrZimport_fresh_moduler{r~Z skipUnlessZ need_c_queuerQr rr r r-rtZTestCaseryr|rr€rr‚rƒr„Ú Exceptionr…rˆr”r•r–rÊrÌrÚmainr r r r ÚsN   "u4)