a zeQ@sddlZddlZddlZddlZddlZddlZddlmZddlm Z ej ddgdZ ej ddgdZ e e dZd Zd d ZGd d d ejZGdddZGdddeZGdddeZGdddeejZeGdddeejZGdddeZGdddeejZeGdddeejZGdddeZGd d!d!eejZeGd"d#d#eejZGd$d%d%eZ Gd&d'd'eZ!Gd(d)d)e!ejZ"eGd*d+d+e!ejZ#Gd,d-d-Z$Gd.d/d/e$ejZ%eGd0d1d1e$ejZ&e'd2kre(dS)3N)support) gc_collectqueue_queue)Zblocked)ZfreshzNo _queue module foundcCs|jdko||jkSNr)maxsizeqsize)qr C/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_queue.pyqfullsr c@seZdZddZddZdS)_TriggerThreadcCs&||_||_t|_tj|dSN)fnargs threadingEvent startedEventThread__init__)selfrrr r r rs z_TriggerThread.__init__cCs$td|j|j|jdS)N皙?)timesleeprsetrrrr r r runs  z_TriggerThread.runN)__name__ __module__ __qualname__rrr r r r rsrc@seZdZddZddZdS)BlockingTestMixinc CsXt||}|z4|||_|js6|d||jWt|St|0dS)Nz*blocking function %r appeared not to block)rstartresultris_setfailr join_thread)r block_func block_args trigger_func trigger_argsthreadr r r do_blocking_test8s    z"BlockingTestMixin.do_blocking_testc Cst||}|zRz ||Wn|y4Yn0|d|Wt||js|dn t||js|d0dS)Nzexpected exception of kind %rz(trigger thread ended but event never set)rr"r%rr&rr$)rr'r(r)r*Zexpected_exception_classr+r r r do_exceptional_blocking_testFs        z.BlockingTestMixin.do_exceptional_blocking_testN)rrr r,r-r r r r r!6sr!c@s\eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)BaseQueueTestMixincCsd|_t|_dSr)cumrLockcumlockrr r r setUpYszBaseQueueTestMixin.setUpcCsn|rtd|||||d|d|dtgdgdgdd}|||g}| |||j j d t t d D]}||||d q|t| d d t }dt }|||t|d||||z|j|dd|dWn|jjyHYn0z|j|dd|dWn|jjy~Yn0||j|f|jd||j|ddf|jdt t D]}|q|| dz|jdd|dWn|jjy Yn0z|jdd|dWn|jjy@Yn0||jd|jd||jd|jddS)N&Call this function with an empty queueoM)r4r5r6)r6r5r4)r4r6r5)Queue LifoQueue PriorityQueuez&Didn't seem to queue the correct data!Queue should not be emptyQueue should not be fullQueue should be fullrblockz(Didn't appear to block with a full queueg{Gz?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 queueempty)TrD)r RuntimeError assertTruerG assertFalsefullputdictget assertEqual __class__rrange QUEUE_SIZEr r%rFullr,Empty)rr Z target_orderZ actual_orderilastrKr r r basic_queue_test]sh         z#BaseQueueTestMixin.basic_queue_testcCs^|}|dkr|dS|j|j|7_Wdn1sF0Y|qdSr)rN task_doner1r/)rr xr r r workers,zBaseQueueTestMixin.workercCsd|_g}dD](}tj|j|fd}|||qtdD]}||q@|| |jt tdddD]}|dqt||D] }|qdS)Nr)rr:targetrdz0q.join() did not block until all tasks were done) r/rrrZr"appendrQrLjoinrOsum)rr threadsrUr+r r r queue_join_tests"    z"BaseQueueTestMixin.queue_join_testcCs6|}z |Wnty&Yn 0|ddSNz(Did not detect task count going negative) type2testrX ValueErrorr%rr r r r test_queue_task_dones   z'BaseQueueTestMixin.test_queue_task_donecCsJ|}||||z |Wnty:Yn 0|ddSrd)rercrXrfr%rgr r r test_queue_joins    z"BaseQueueTestMixin.test_queue_joincCs"|t}||||dSr)rerRrWrgr r r test_basics  zBaseQueueTestMixin.test_basiccCs~|t}|t|jdddWdn1s80Y|t|jdddWdn1sp0YdSNr:r^rB)rerR assertRaisesrfrLrNrgr r r &test_negative_timeout_raises_exceptions   , z9BaseQueueTestMixin.test_negative_timeout_raises_exceptioncCs|t}ttD]}|dq||jj|dWdn1sP0YttD] }|qb||jj|Wdn1s0YdS)Nr:) rerRrQ put_nowaitrlrrS get_nowaitrTrr rUr r r test_nowaits   (  zBaseQueueTestMixin.test_nowaitcCs|d}|d|d|d||jj|dWdn1sV0Y||dd|_||jj|dWdn1s0YdS)Nr:r=) rerLrlrrSrnrOr rrgr r r test_shrinking_queues    (z'BaseQueueTestMixin.test_shrinking_queueN) rrr r2rWrZrcrhrirjrmrqrtr r r r r.Xs9    r.cseZdZfddZZS) QueueTestcs|jj|_tdSr)rr7resuperr2rrPr r r2s zQueueTest.setUprrr r2 __classcell__r r rwr rusruc@seZdZeZdS) PyQueueTestNrrr py_queuerr r r r rzsrzc@seZdZeZdS) CQueueTestNrrr c_queuerr r r r r}sr}cseZdZfddZZS) LifoQueueTestcs|jj|_tdSr)rr8rervr2rrwr r r2s zLifoQueueTest.setUprxr r rwr rsrc@seZdZeZdS)PyLifoQueueTestNr{r r r r rsrc@seZdZeZdS)CLifoQueueTestNr~r r r r r srcseZdZfddZZS)PriorityQueueTestcs|jj|_tdSr)rr9rervr2rrwr r r2s zPriorityQueueTest.setUprxr r rwr rsrc@seZdZeZdS)PyPriorityQueueTestNr{r r r r rsrc@seZdZeZdS)CPriorityQueueTestNr~r r r r rsrc@s eZdZdS)FailingQueueExceptionNrrr r r r r r rcs,eZdZfddZddZddZZS)FailingQueueTestcs0|jjGfddd}||_tdS)Ncs0eZdZfddZfddZfddZdS)z,FailingQueueTest.setUp..FailingQueuecs"d|_d|_j|g|RdS)NF) fail_next_put fail_next_getr)rrr7r r r)sz5FailingQueueTest.setUp..FailingQueue.__init__cs |jrd|_td||SNFzYou Lose)rr_put)ritemrr r r-sz1FailingQueueTest.setUp..FailingQueue._putcs|jrd|_td|Sr)rr_getrrr r r2sz1FailingQueueTest.setUp..FailingQueue._getN)rrr rrrr rr r FailingQueue(s  r)rr7rrvr2)rrrwrr r2$szFailingQueueTest.setUpcCs|rtdttdD]}||qd|_z|jddd|dWnty`Yn0d|_z|jddd |dWntyYn0|d |t |d d|_z"| |jd |j d |dWntyYn0|d d|_z$| |jd|j d t|dWnty6Yn0|d |t |d | |t | d|d |t |d | |jd |j d ttD]}| q|| d|dd|_ z| |dWntyYn0||dd|_ z|j dd |dWntyDYn0||d| || dd|_ z$| |j d |jdt|dWntyYn0||d| || ddS)Nr3r:TZoopsrr@z)The queue didn't fail when it should haverrBrVr?)rKr )rKTrDr<rEfirstr;rF)r rHrQrRrLrr%rrIr r,rNr-rrpr r r failing_queue_test<s            z#FailingQueueTest.failing_queue_testcCs"|t}||||dSr)rrRrrgr r r test_failing_queues  z#FailingQueueTest.test_failing_queue)rrr r2rrryr r rwr r"s Qrc@seZdZeZdS)PyFailingQueueTestNr{r r r r rsrc@seZdZeZdS)CFailingQueueTestNr~r r r r rsrc@steZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZdS)BaseSimpleQueueTestcCs||_dSr)rer rr r r r2szBaseSimpleQueueTest.setUpcCsPz |}Wnty YdS0|||dkrt|dqdS)Ng?MbP?)pop IndexErrorrLrandomrr)rr seqrndvalr r r feeds    zBaseSimpleQueueTest.feedcCs$|}||krdS||qdSr)rNr_rr resultssentinelrr r r consumeszBaseSimpleQueueTest.consumecCsRz|jdd}Wq6|jjy0tdYq0q6q||krBdS||qdS)NFr@h㈵>)rNrrTrrr_rr r r consume_nonblocksz$BaseSimpleQueueTest.consume_nonblockcCsHz|jdd}Wq,|jjy&Yq0q,q||kr8dS||qdS)NrrB)rNrrTr_rr r r consume_timeoutsz#BaseSimpleQueueTest.consume_timeoutc sgd|g|tdgfddfddt|D}fddt|D}t||Wdn1s0Y|||  dS)N*csfdd}|S)Nc sFz|i|Wn.ty@}z|WYd}~n d}~00dSr) BaseExceptionr_)rkwargse) exceptionsfr r wrapperszHBaseSimpleQueueTest.run_threads..log_exceptions..wrapperr )rr)r)rr log_exceptionssz7BaseSimpleQueueTest.run_threads..log_exceptionscs$g|]}tjfdqSr[rr.0rU) feed_funcrr rrr r s z3BaseSimpleQueueTest.run_threads..cs$g|]}tjfdqSrrr) consume_funcrr rrr r rs r) reverserRandomrQrZ start_threadsrJrIrGrOr ) rZ n_feedersZ n_consumersr inputsrrZfeedersZ consumersr ) rrrrr rrrrr run_threadss&   zBaseSimpleQueueTest.run_threadscCs|j}||||d|d||||d|d|d|d||||d||d||d|| d||d||jddd||||d||jdd d||||d| |j j |jddWdn1s^0Y| |j j |jd d Wdn1s0Y| |j j | Wdn1s0Y||||ddS) Nrr:r=rrrsFr@rrBr) r rIrGrOr rLrJrnrNrorlrrTrgr r r rjs:    ,,(zBaseSimpleQueueTest.test_basiccCsJ|j}|d|t|jddWdn1s<0YdSrk)r rLrlrfrNrgr r r rms  z:BaseSimpleQueueTest.test_negative_timeout_raises_exceptioncCs:|j}ttd}|dd|||j|j}|||dS)Nr]r:)r listrQrrrrO)rr rrr r r test_orders zBaseSimpleQueueTest.test_ordercCsBd}|j}ttd}||||||j|j}|t||dSN2')r rrQrrrrOsortedrNr rrr r r test_many_threads%s  z%BaseSimpleQueueTest.test_many_threadscCsBd}|j}ttd}||||||j|j}|t||dSr)r rrQrrrrOrrr r r test_many_threads_nonblock0s  z.BaseSimpleQueueTest.test_many_threads_nonblockcCsBd}|j}ttd}||||||j|j}|t||dS)Nri)r rrQrrrrOrrr r r test_many_threads_timeout:s  z-BaseSimpleQueueTest.test_many_threads_timeoutcCsdGddd}d}|j}t|D]}||q t|D]$}t|}t||q:dS)Nc@s eZdZdS)z.BaseSimpleQueueTest.test_references..CNrr r r r CGsr)r rQrLweakrefrefrNrZ assertIsNone)rrrr rUwrr r r test_referencesDs  z#BaseSimpleQueueTest.test_referencesN)rrr r2rrrrrrjrmrrrrrr r r r rs   !%    rcs eZdZeZfddZZS)PySimpleQueueTestcs|jj|_tdSr)r_PySimpleQueuerervr2rrwr r r2Ws zPySimpleQueueTest.setUp)rrr r|rr2ryr r rwr rTsrcs0eZdZeZfddZddZddZZS)CSimpleQueueTestcs|jj|_tdSr)r SimpleQueuerervr2rrwr r r2as zCSimpleQueueTest.setUpcCs(||j|jj||j|jjdSr)ZassertIsrerrrr r r test_is_defaultesz CSimpleQueueTest.test_is_defaultcs||jtd}g}Gfdddt}|}t~||d|kr,q`q,||t t |ddS)Nrcs"eZdZddZfddZdS)z2CSimpleQueueTest.test_reentrancy..CircularcSs ||_dSr)Zcircularrr r r rusz;CSimpleQueueTest.test_reentrancy..Circular.__init__cstdSr)rLnextrgenr r r __del__xsz:CSimpleQueueTest.test_reentrancy..Circular.__del__N)rrr rrr rr r Circulartsrr^r:) r itertoolscountobjectrLrr_rNrOrrQ)rrrror rr test_reentrancyis z CSimpleQueueTest.test_reentrancy) rrr rrr2rrryr r rwr r\s r__main__))rrrrZunittestrtestrZ test.supportrZimport_fresh_moduler|rZ skipUnlessZ need_c_queuerRr rrr!r.ruZTestCaserzr}rrrrrr Exceptionrrrrrrrrmainr r r r sP    "u5)