
    0hh1                        S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKJrJ	r	  S SKJ
r
  S SKJr  \R                  " SS9  \
R                  " SS/S	9r\
R                  " SS/S
9r\R                   " \S5      rSrS r " S S\R(                  5      r " S S5      r " S S\5      r " S S\5      r " S S\\R2                  5      r\ " S S\\R2                  5      5       r " S S\5      r " S S\\R2                  5      r\ " S S\\R2                  5      5       r " S  S!\5      r " S" S#\\R2                  5      r \ " S$ S%\\R2                  5      5       r! " S& S'\"5      r# " S( S)\5      r$ " S* S+\$\R2                  5      r%\ " S, S-\$\R2                  5      5       r& " S. S/5      r' " S0 S1\'\R2                  5      r(\ " S2 S3\'\R2                  5      5       r)\*S4:X  a  \RV                  " 5         gg)5    N)
gc_collect
bigmemtest)import_helper)threading_helperT)modulequeue_queue)blocked)freshzNo _queue module found   c                 h    U R                   S:  =(       a    U R                  5       U R                   :H  $ Nr   )maxsizeqsizeqs    8/opt/python-3.13.8/usr/lib/python3.13/test/test_queue.pyqfullr      s$    99q=3QWWY!))33    c                        \ rS rSrS rS rSrg)_TriggerThread   c                     Xl         X l        [        R                  " 5       U l        [        R
                  R                  U 5        g N)fnargs	threadingEventstartedEventThread__init__)selfr   r   s      r   r!   _TriggerThread.__init__   s/    	%OO-!!$'r   c                     [         R                  " S5        U R                  R                  5         U R                  " U R
                  6   g )N皙?)timesleepr   setr   r   r"   s    r   run_TriggerThread.run"   s1     	

3r   )r   r   r   N)__name__
__module____qualname____firstlineno__r!   r*   __static_attributes__ r   r   r   r      s    (r   r   c                        \ rS rSrS rS rSrg)BlockingTestMixin;   c                 .   [        X45      nUR                  5          U" U6 U l        UR                  R	                  5       (       d  U R                  SU-  5        U R                  [        R                  " U5        $ ! [        R                  " U5        f = f)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threads         r   do_blocking_test"BlockingTestMixin.do_blocking_test=   sw    ;	1$j1DK&&--//		F$% &;;((0((0s   AA< <Bc                    [        X45      nUR                  5           U" U6   U R                  SU-  5         [        R                  " U5        UR
                  R                  5       (       d  U R                  S5        g g ! U a    e f = f! [        R                  " U5        UR
                  R                  5       (       d  U R                  S5        f f = f)Nzexpected exception of kind %rz(trigger thread ended but event never set)r   r6   r9   r   r:   r   r8   )r"   r;   r<   r=   r>   expected_exception_classr?   s          r   do_exceptional_blocking_test.BlockingTestMixin.do_exceptional_blocking_testK   s    ;	F;J' 		9!9: ; ((0&&--//		DE 0 ,  ((0&&--//		DE 0s   B  B  BB A	C)r7   N)r,   r-   r.   r/   r@   rD   r0   r1   r   r   r3   r3   ;   s    1Fr   r3   c                   .   \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS1S jrS rS rS1S jrS r S1S jr!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/r1g0)2BaseQueueTestMixin]   c                 F    SU l         [        R                  " 5       U l        g r   )cumr   Lockcumlockr)   s    r   setUpBaseQueueTestMixin.setUp^   s     ~~'r   c                    UR                  5       (       a  [        S5      eU R                  UR                  5       5        U R	                  UR                  5       5        UR                  S5        UR                  S5        UR                  S5        [        / SQ/ SQ/ SQS9nUR                  5       UR                  5       UR                  5       /nU R                  X2UR                  R                     S	5        [        [        S
-
  5       H4  nUR                  U5        U R                  UR                  5       S5        M6     U R                  [        U5      (       + S5        S[        -  nS[        -  nUR                  U5        U R                  [        U5      S5        U R	                  UR                  5       5        U R                  UR                  5       5         UR                  USS9  U R                  S5         UR                  USS9  U R                  S5        U R%                  UR                  U4UR                  S5        U R%                  UR                  USS4UR                  S5        [        [        5       H  nUR                  5         M     U R                  UR                  5       (       + S5         UR                  SS9  U R                  S5         UR                  SS9  U R                  S5        U R%                  UR                  SUR                  S5        U R%                  UR                  SUR                  S5        g ! U R                   R"                   a     GNqf = f! U R                   R"                   a     GNpf = f! U R                   R&                   a     Nf = f! U R                   R&                   a     Nf = f)N&Call this function with an empty queueo   M     )rQ   rR   rS   )rS   rR   rQ   )rQ   rS   rR   )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{Gz?timeoutz+Didn't appear to time-out with a full queuer1   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)Tra   )r   RuntimeError
assertTruerd   assertFalsefullputdictgetassertEqual	__class__r,   range
QUEUE_SIZEr   r9   r   Fullr@   Empty)r"   r   target_orderactual_orderilastrh   s          r   basic_queue_test#BaseQueueTestMixin.basic_queue_testb   s   7799GHH	""	c
	c
	c
O(7,;= !%%'2AKK4H4H'IA	Cz!|$AEE!HOOAGGI'BC % 	E!H&@A:~z!	da"89#!	EE$aE II@A	EE$E%IICD 	aeedWaeeR8aeedD"%5quubAz"AEEG #AGGI'>?	EEENIIBC	EE$EIIEF 	aeeR
;aeeZ
C5 zz 		
 zz 		 zz 		
 zz 		sH   "!M !M8  N & N9 M54M58NNN65N69OOc                      UR                  5       nUS:  a  UR                  5         g U R                     U =R                  U-  sl        S S S 5        UR                  5         Mc  ! , (       d  f       N = fr   )rk   	task_donerL   rJ   )r"   r   xs      r   workerBaseQueueTestMixin.worker   sR    A1uA KKM 
 s   A%%
A3c                    SU l         / nS HD  n[        R                  " U R                  U4S9nUR	                  5         UR                  U5        MF     [        S5       H  nUR                  U5        M     UR                  5         U R                  U R                   [        [        S5      5      S5        S H  nUR                  S5        M     UR                  5         U H  nUR                  5         M     g )Nr   )r   rW   targetr   d   z0q.join() did not block until all tasks were done)rJ   r   r    r{   r6   appendrn   ri   joinrl   sum)r"   r   threadsrt   r?   s        r   queue_join_test"BaseQueueTestMixin.queue_join_test   s    A%%T[[tDFLLNNN6"  sAEE!H 	3uSz?K	MAEE"I 	FKKM r   c                     U R                  5       n UR                  5         U R                  S5        g ! [         a     g f = fNz(Did not detect task count going negative)	type2testry   r9   
ValueErrorr"   r   s     r   test_queue_task_done'BaseQueueTestMixin.test_queue_task_done   s@    NN	BKKM II@A  		s   4 
A Ac                     U R                  5       nU R                  U5        U R                  U5         UR                  5         U R                  S5        g ! [         a     g f = fr   )r   r   ry   r9   r   r   s     r   test_queue_join"BaseQueueTestMixin.test_queue_join   s^     NNQQ	BKKM II@A  		s   A 
A#"A#c                 r    U R                  [        5      nU R                  U5        U R                  U5        g r   )r   ro   rv   r   s     r   
test_basicBaseQueueTestMixin.test_basic   s.     NN:&a a r   c                 *   U R                  [        5      nU R                  [        5         UR	                  SSS9  S S S 5        U R                  [        5         UR                  SSS9  S S S 5        g ! , (       d  f       N== f! , (       d  f       g = fNrW   r   r_   )r   ro   assertRaisesr   ri   rk   r   s     r   &test_negative_timeout_raises_exception9BaseQueueTestMixin.test_negative_timeout_raises_exception   si    NN:&z*EE!RE  +z*EE!RE  +* +***s   A3B3
B
Bc                    U R                  [        5      n[        [        5       H  nUR                  S5        M     U R	                  U R
                  R                  5         UR                  S5        S S S 5        [        [        5       H  nUR                  5         M     U R	                  U R
                  R                  5         UR                  5         S S S 5        g ! , (       d  f       Ns= f! , (       d  f       g = f)NrW   )	r   ro   rn   
put_nowaitr   r   rp   
get_nowaitrq   r"   r   rt   s      r   test_nowaitBaseQueueTestMixin.test_nowait   s    NN:&z"ALLO #tzz/LLO 0 z"ALLN #tzz//0LLN 10 0/
 10s   "C!C2!
C/2
D c                    U R                  S5      nUR                  S5        UR                  S5        UR                  S5        U R                  U R                  R                  5         UR                  S5        S S S 5        U R                  UR                  5       S5        SUl        U R                  U R                  R                  5         UR                  S5        S S S 5        g ! , (       d  f       Nu= f! , (       d  f       g = f)N   rW   rZ      )	r   ri   r   r   rp   r   rl   r   r   r   s     r   test_shrinking_queue'BaseQueueTestMixin.test_shrinking_queue   s    NN1	a	a	atzz/LLO 0A&	tzz/LLO 0/	 0/ 0/s   *C+C<+
C9<
D
c                    U R                  5       nUR                  5         U R                  U R                  R                  5         UR                  S5        S S S 5        U R                  U R                  R                  5         UR                  5         S S S 5        g ! , (       d  f       NM= f! , (       d  f       g = fNdata)r   shutdownr   r   ShutDownri   rk   r   s     r   test_shutdown_empty&BaseQueueTestMixin.test_shutdown_empty   sx    NN	

tzz223EE&M 4tzz223EEG 43 4333s   BB0
B-0
B>c                 $   U R                  5       nUR                  S5        UR                  5         UR                  5         U R	                  U R
                  R                  5         UR                  5         S S S 5        g ! , (       d  f       g = fr   )r   ri   r   rk   r   r   r   r   s     r   test_shutdown_nonempty)BaseQueueTestMixin.test_shutdown_nonempty   sX    NN	f	

	tzz223EEG 433s   'B
Bc                    U R                  5       nUR                  S5        UR                  SS9  U R                  U R                  R
                  5         UR                  5         S S S 5        g ! , (       d  f       g = f)Nr   T	immediate)r   ri   r   r   r   r   rk   r   s     r   test_shutdown_immediate*BaseQueueTestMixin.test_shutdown_immediate  sT    NN	f	

T
"tzz223EEG 433s   A00
A>c                 "   U R                  5       nU R                  UR                  5        UR                  5         U R	                  UR                  5        UR                  SS9  U R	                  UR                  5        UR                  SS9  g )NTr   F)r   rg   is_shutdownr   rf   r   s     r   !test_shutdown_allowed_transitions4BaseQueueTestMixin.test_shutdown_allowed_transitions  se    NN'	

&	

T
"&	

U
#r   c                 ~   U R                  S5      nUR                  S5        UR                  S5        UR                  U5        U R	                  U R
                  R                  5         UR                  S5        S S S 5        U R	                  U R
                  R                  5         UR                  S5        S S S 5        U(       a  U R	                  U R
                  R                  5         UR                  5         S S S 5        U R	                  U R
                  R                  5         UR                  5         S S S 5        U R	                  [        5         UR                  5         S S S 5        UR                  5         g U R                  UR                  5       S5        UR                  5         U R                  UR                  5       S5        UR                  5         UR                  5         U R	                  U R
                  R                  5         UR                  5         S S S 5        U R	                  U R
                  R                  5         UR                  5         S S S 5        U R	                  U R
                  R                  5         UR                  SS5        S S S 5        g ! , (       d  f       GN== f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)	NrZ   LOEWLOTg      ?)r   ri   r   r   r   r   r   rk   r   r   ry   r   assertIn)r"   r   r   s      r   #_shutdown_all_methods_in_one_thread6BaseQueueTestMixin._shutdown_all_methods_in_one_thread  s   NN1	c
	S	

9tzz223EE#J 4tzz223LL 4""4::#6#67 8""4::#6#67 8"":. /FFHMM!%%'4(KKMMM!%%'4(KKMFFH ""4::#6#67 8""4::#6#67 8""4::#6#67dC  871 4333 8777.. 877777s`   *J2)K/K-K(K:LLL.2
K
K
K%(
K7:
L	
L
L+.
L<c                 $    U R                  S5      $ NFr   r)   s    r   'test_shutdown_all_methods_in_one_thread:BaseQueueTestMixin.test_shutdown_all_methods_in_one_thread:  s    77>>r   c                 $    U R                  S5      $ NTr   r)   s    r   1test_shutdown_immediate_all_methods_in_one_threadDBaseQueueTestMixin.test_shutdown_immediate_all_methods_in_one_thread=  s    77==r   c                    [        SUS-  5       H  nUR                  US45        M     UR                  5         [        US-  U5       HV  n UR                  US45        Xt:X  d  M  UR                  5       (       a  M5  UR                  5         UR                  S5        MX     g ! U R                  R                   a    UR                  S5           g f = f)Nr   rZ   LOYDYDLOFT)rn   ri   waitr   r   r   r8   r(   )r"   r   nresultsi_when_exec_shutdownevent_shutdownbarrier_startrt   s           r   _write_msg_thread$BaseQueueTestMixin._write_msg_thread@  s    
 q.12AEE1f+ 3 	+Q.2Aq&k" (%,,.."&&(NN4( 3 ::&& u%s   B$$+CCc                 F   UR                  S5        UR                  5         UR                  5           UR                  S5        UR                  5         M$  ! U R                  R                   a    UR                  S5         g U R                  R                   a     NJf = fNTF)rk   ry   r   r   r   r   rq   )r"   r   r   r   s       r   _read_msg_thread#BaseQueueTestMixin._read_msg_threadX  s    	d	e  ::&& t$::## s   !A +B B B c                     UR                  5         UR                  U5        UR                  UR                  5       S:H  5        g r   )r   r   r   r   )r"   r   r   	event_endr   s        r   _shutdown_thread#BaseQueueTestMixin._shutdown_threadh  s.    	

9qwwyA~&r   c                 D    UR                  5         UR                  5         g r   )r   r   )r"   r   r   s      r   _join_threadBaseQueueTestMixin._join_threadm  s    	r   c           	      6   U R                  5       n/ n/ n/ n/ nSnSnSn	Sn
X-  nUS-  nXx-   nU(       a  X-  n[        R                  " U5      n[        R                  " 5       nU R                  XrXXU44U R
                  XX^44U R                  SX&X44/nU(       a  UR                  U R                  XU445        U HP  u  nnn[        U5       H:  nUR                  [        R                  " UUS95        US   R                  5         M<     MR     U H  nUR                  5         M     U R                  SU;   5        U R                  UR                  S5      U5        U(       a3  U R!                  US/5        U R                  UR#                  5       5        g g )	Nr   r[   rZ   i   rW   r~   r   T)r   r   Barrierr   r   r   r   r   r   rn   r    r6   r   rf   rl   countassertListEqualrd   )r"   r   r   psres_putsres_getsres_shutdownwrite_threadsread_threadsjoin_threadsnb_msgs	nb_msgs_wwhen_exec_shutdownnpartiesr   ev_exec_shutdownlprocsfuncr   r   rt   r?   s                         r   %_shutdown_all_methods_in_many_threads8BaseQueueTestMixin._shutdown_all_methods_in_many_threadsr  s    NN,	&!^ !/$H!))(3$??,##]	,>,95; < ""Lh2NO""A9I'UV MM4,,l<NOP#MD!T1X		)**$TBC2  $ FKKM  	()-|<  v6OOAGGI& r   c                 $    U R                  S5      $ r   r   r)   s    r   )test_shutdown_all_methods_in_many_threads<BaseQueueTestMixin.test_shutdown_all_methods_in_many_threads  s    99%@@r   c                 $    U R                  S5      $ r   r   r)   s    r   3test_shutdown_immediate_all_methods_in_many_threadsFBaseQueueTestMixin.test_shutdown_immediate_all_methods_in_many_threads  s    99$??r   c                     UR                  5          UR                  5       nUR                  U(       + 5        U(       + $ ! U R                  R                   a    UR                  U5        Us $ f = fr   )r   rk   r   r   r   )r"   r   gor   r   msgs         r   _getBaseQueueTestMixin._get  s[    
		%%'CNNx<(<zz"" 	NN8$O	s   ,? -A/.A/c                 (    U R                  XUS5      $ r   )r   )r"   r   r   r   s       r   _get_shutdown BaseQueueTestMixin._get_shutdown  s    yy..r   c                     UR                  5          UR                  5       nUR                  5         UR                  S5        U$ ! U R                  R
                   a    UR                  S5         gf = fr   )r   rk   ry   r   r   r   )r"   r   r   r   r   s        r   _get_task_done!BaseQueueTestMixin._get_task_done  s]    
		%%'CKKMNN4 Jzz"" 	NN5!	s   2A +A32A3c                     UR                  5          UR                  U5        UR                  U(       + 5        U(       + $ ! U R                  R                   a    UR                  U5        Us $ f = fr   )r   ri   r   r   r   )r"   r   r   r   r   r   s         r   _putBaseQueueTestMixin._put  s[    
		EE#JNNx<(<zz"" 	NN8$O	s   -A   -A0/A0c                 (    U R                  XX4S5      $ r   )r  )r"   r   r   r   r   s        r   _put_shutdown BaseQueueTestMixin._put_shutdown  s    yyd33r   c                      UR                  5         UR                  U(       + 5        U(       + $ ! U R                  R                   a    UR                  U5        Us $ f = fr   )r   r   r   r   )r"   r   r   r   s       r   _joinBaseQueueTestMixin._join  sP    	FFHNNx<(<zz"" 	NN8$O	s   ,/ -AAc                 &    U R                  XS5      $ r   )r  )r"   r   r   s      r   _join_shutdown!BaseQueueTestMixin._join_shutdown  s    zz!d++r   c                    U R                  S5      n/ n[        R                  " 5       nUR                  S5        UR                  S5        U(       a!  U R                  X$U44U R                  X$U444nO/U R
                  X$U44U R
                  X$U44U R
                  X$U444n/ nU H;  u  pxUR                  [        R                  " XxS95        US   R                  5         M=     UR                  U5        UR                  5         U H  n	U	R                  5         M     U(       a  U R                  USS/5        g U R                  [        U5      S/S/[        U5      S-
  -  -   5        g )	NrZ   YDr~   r   TFrW   )r   r   r   ri   r  r   r   r    r6   r   r(   r   r   sortedlen
r"   r   r   r   r   thrdsr   r   paramsts
             r   _shutdown_get BaseQueueTestMixin._shutdown_get  sJ   NN1__	c
	c
 ##aW%56##aW%56E QG,-QG,-QG,-E !LDNN9++4EFBK " 	


9
AFFH   4,7  5'TFCJqL<Q2QRr   c                 $    U R                  S5      $ r   r  r)   s    r   test_shutdown_get$BaseQueueTestMixin.test_shutdown_get      !!%((r   c                 $    U R                  S5      $ r   r  r)   s    r   test_shutdown_immediate_get.BaseQueueTestMixin.test_shutdown_immediate_get      !!$''r   c                    U R                  S5      n/ n[        R                  " 5       nUR                  S5        UR                  S5        U R                  USXC44U R                  USXC444n/ nU H;  u  pxUR                  [        R                  " XxS95        US   R                  5         M=     UR                  5         UR                  5         U H  n	U	R                  5         M     U R                  US/[        U5      -  5        g )	NrZ   r  r  r   r   r~   r   T)r   r   r   ri   r
  r   r    r6   r   r(   r   rl   r  r  s
             r   _shutdown_put BaseQueueTestMixin._shutdown_put  s    NN1__	c
	c
 !S"!67!S"!67
 !LDNN9++4EFBK " 	



AFFH  	4&U"34r   c                 $    U R                  S5      $ r   r'  r)   s    r   test_shutdown_put$BaseQueueTestMixin.test_shutdown_put  r!  r   c                 $    U R                  S5      $ r   r*  r)   s    r   test_shutdown_immediate_put.BaseQueueTestMixin.test_shutdown_immediate_put  r%  r   c           	         U R                  5       n/ nUR                  S5        [        R                  " 5       nUR	                  5       nU R
                  X#44U R
                  X#444n/ nU H;  u  pUR                  [        R                  " XS95        US   R                  5         M=     U(       dW  / n
[        U5       HF  nUR                  [        R                  " U R                  X$U
4S95        US   R                  5         MH     UR                  U5        UR                  5         U H  nUR                  5         M     U R                  US/[        U5      -  5        g )Nr  r~   r   T)r   ri   r   r   r   r  r   r    r6   rn   r  r   r(   r   rl   r  )r"   r   r   r   r   nbr  r   r   r  resrt   r  s                r   _shutdown_join!BaseQueueTestMixin._shutdown_join  s)   NN	c
__WWY ZZ!&ZZ!&
 !LDNN9++4EFBK " C2Yy//t7J7JRSY\Q]^_!!#  	


9
AFFH  	4&U"34r   c                 $    U R                  S5      $ r   r3  r)   s    r   test_shutdown_immediate_join/BaseQueueTestMixin.test_shutdown_immediate_join9  s    ""4((r   c                 $    U R                  S5      $ r   r6  r)   s    r   test_shutdown_join%BaseQueueTestMixin.test_shutdown_join<  s    ""5))r   c                 8   U R                  S5      n/ n[        R                  " 5       nUR                  S5        U R                  USXC44U R
                  X#444n/ nU H;  u  pxUR                  [        R                  " XxS95        US   R                  5         M=     U R                  UR                  S5        UR                  U5        UR                  5         U(       a?  U R                  U R                  R                  5         UR!                  5         S S S 5        O2UR#                  5       n	U R                  U	S5        UR%                  5         U H  n
U
R'                  5         M     U R                  US/[)        U5      -  5        g ! , (       d  f       NG= f)NrZ   r  r   r~   r   rW   T)r   r   r   ri   r
  r  r   r    r6   rl   unfinished_tasksr   r(   r   r   r   r   rk   ry   r   r  )r"   r   r   r   r   r  r   r   r  r7   r  s              r   _shutdown_put_join%BaseQueueTestMixin._shutdown_put_join?  sJ   NN1__	c
 !S"!67ZZ!&
 !LDNN9++4EFBK " 	++Q/	

9
""4::#6#67 87 UUWFVS)KKMAFFH  	4&U"34 87s   F
Fc                 $    U R                  S5      $ r   r>  r)   s    r    test_shutdown_immediate_put_join3BaseQueueTestMixin.test_shutdown_immediate_put_join`  s    &&t,,r   c                 $    U R                  S5      $ r   rA  r)   s    r   test_shutdown_put_join)BaseQueueTestMixin.test_shutdown_put_joinc  s    &&u--r   c                    U R                  S5      n/ n[        R                  " 5       nUR                  S5        UR                  S5        U R	                  UR
                  UR                  5       5        U R                  XU44U R                  XU44U R                  X44U R                  X444n/ nU H;  u  pgUR                  [        R                  " XgS95        US   R                  5         M=     UR                  5         UR                  S5        U H  nUR                  5         M     U R	                  US/[        U5      -  5        g )NrZ   r  r  r~   r   FT)r   r   r   ri   rl   r=  r   r  r  r   r    r6   r(   r   r   r  )	r"   r   r   r   r  r   r   r  r  s	            r    test_shutdown_get_task_done_join3BaseQueueTestMixin.test_shutdown_get_task_done_joinf  s   NN1__	c
	c
++QWWY7   1'"23  1'"23ZZ!&ZZ!&	
 !LDNN9++4EFBK " 		

5AFFH  	4&U"34r   c                   ^^ UU4S jnU R                  5       m/ m[        R                  " US9nUR                  5         TR	                  SS9  UR                  SS9  U R                  UR                  5       5        U R                  [        T5      S5        U R                  TS   U R                  R                  5        g )	Nc                     >  TR                  TR                  5       5        g ! [         a  n TR                  U 5         S n A g S n A ff = fr   )r   rk   	Exception)er   r   s    r   rk   9BaseQueueTestMixin.test_shutdown_pending_get.<locals>.get  s9    "quuw' "q!!"s   # 
AAA)r   Fr   g      $@r_   rW   r   )r   r   r    r6   r   r   rg   is_aliverl   r  assertIsInstancer   r   )r"   rk   
get_threadr   r   s      @@r   test_shutdown_pending_get,BaseQueueTestMixin.test_shutdown_pending_get  s    	" NN%%S1
	

U
#%,,./Wq)gaj$***=*=>r   )rJ   rL   N)F)2r,   r-   r.   r/   rM   rv   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r  r  r  r#  r'  r+  r.  r3  r7  r:  r>  rB  rE  rH  rR  r0   r1   r   r   rG   rG   ]   s    (6Dr$BB!!
$!B?>)0 '

.'`A@/	4, SD)(5.)(56)*5B-.52?r   rG   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )	QueueTesti  c                 X   > U R                   R                  U l        [        TU ]  5         g r   )r   rT   r   superrM   r"   rm   s    r   rM   QueueTest.setUp  s    ))r   r   r,   r-   r.   r/   rM   r0   __classcell__rm   s   @r   rU  rU         r   rU  c                       \ rS rSr\rSrg)PyQueueTesti  r1   Nr,   r-   r.   r/   py_queuer   r0   r1   r   r   r`  r`        Er   r`  c                       \ rS rSr\rSrg)
CQueueTesti  r1   Nr,   r-   r.   r/   c_queuer   r0   r1   r   r   re  re        Er   re  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )LifoQueueTesti  c                 X   > U R                   R                  U l        [        TU ]  5         g r   )r   rU   r   rW  rM   rX  s    r   rM   LifoQueueTest.setUp  s    --r   rZ  r[  r]  s   @r   rj  rj    r^  r   rj  c                       \ rS rSr\rSrg)PyLifoQueueTesti  r1   Nra  r1   r   r   rn  rn    rc  r   rn  c                       \ rS rSr\rSrg)CLifoQueueTesti  r1   Nrf  r1   r   r   rp  rp    rh  r   rp  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )PriorityQueueTesti  c                 X   > U R                   R                  U l        [        TU ]  5         g r   )r   rV   r   rW  rM   rX  s    r   rM   PriorityQueueTest.setUp  s    11r   rZ  r[  r]  s   @r   rr  rr    r^  r   rr  c                       \ rS rSr\rSrg)PyPriorityQueueTesti  r1   Nra  r1   r   r   rv  rv    rc  r   rv  c                       \ rS rSr\rSrg)CPriorityQueueTesti  r1   Nrf  r1   r   r   rx  rx    rh  r   rx  c                       \ rS rSrSrg)FailingQueueExceptioni  r1   Nr,   r-   r.   r/   r0   r1   r   r   rz  rz    s    r   rz  c                   4   ^  \ rS rSrU 4S jrS rS rSrU =r$ )FailingQueueTesti  c                 x   >^ U R                   R                  m " U4S jST5      nXl        [        TU ]  5         g )Nc                   :   > \ rS rSrU 4S jrU 4S jrU 4S jrSrg),FailingQueueTest.setUp.<locals>.FailingQueuei  c                 H   > SU l         SU l        TR                  " U /UQ76   g r   )fail_next_putfail_next_getr!   )r"   r   rT   s     r   r!   5FailingQueueTest.setUp.<locals>.FailingQueue.__init__  s$    %*"%*"t+d+r   c                 l   > U R                   (       a  SU l         [        S5      eTR                  X5      $ NFzYou Lose)r  rz  r  )r"   itemrT   s     r   r  1FailingQueueTest.setUp.<locals>.FailingQueue._put  s.    %%).D&/
;;zz$--r   c                 l   > U R                   (       a  SU l         [        S5      eTR                  U 5      $ r  )r  rz  r   )r"   rT   s    r   r   1FailingQueueTest.setUp.<locals>.FailingQueue._get  s.    %%).D&/
;;zz$''r   )r  r  N)r,   r-   r.   r/   r!   r  r   r0   )rT   s   r   FailingQueuer    s    ,.
( (r   r  )r   rT   r  rW  rM   )r"   r  rT   rm   s     @r   rM   FailingQueueTest.setUp  s/    

  	(5 	(  )r   c                    UR                  5       (       a  [        S5      e[        [        S-
  5       H  nUR	                  U5        M     SUl         UR	                  SSS9  U R                  S5        SUl         UR	                  SSS	9  U R                  S5        UR	                  S
5        U R                  [        U5      S5        SUl         U R                  UR                  SUR                  S5        U R                  S5        UR	                  S
5        SUl         U R                  UR                  SUR                  S[        5        U R                  S5        UR	                  S
5        U R                  [        U5      S5        UR                  5         U R                  [        U5      (       + S5        UR	                  S
5        U R                  [        U5      S5        U R                  UR                  SUR                  S5        [        [        5       H  nUR                  5         M     U R                  UR                  5       (       + S5        UR	                  S5        SUl         UR                  5         U R                  S5        U R                  UR                  5       S5        SUl         UR                  SS	9  U R                  S5        U R                  UR                  5       S5        UR                  5         U R                  UR                  5       (       + S5        SUl         U R                  UR                  SUR                  S[        5        U R                  S5        U R                  UR                  5       S5        UR                  5         U R                  UR                  5       (       + S5        g ! [         a     GNhf = f! [         a     GNPf = f! [         a     GNf = f! [         a     GNf = f! [         a     GNf = f! [         a     GNSf = f! [         a     Nf = f)NrP   rW   Toopsr   r]   z)The queue didn't fail when it should haver%   r_   ru   r\   )rh   r1   )rh   Tra   rY   rb   firstrX   rc   )r   re   rn   ro   ri   r  r9   rz  rf   r   r@   rk   rD   r  r   s      r   failing_queue_test#FailingQueueTest.failing_queue_test  sn   7799GHHz!|$AEE!H % 	EE&E"IIAB 	EE&#E&IIAB 	
fa"89	!!!%%AEE2>IIAB
 	
f	--aee5GPR.CEIIAB
 	
fa"89	E!H&@A	fa"89aeeYr:z"AEEG #AGGI'>?	g	EEGIIAB 		#>?	EE#EIIAB 		#>?	AGGI'>?	--aeeR
.CEIIAB 		#>?	AGGI'>?K % 		 % 		 % 		 % 		* % 		 % 		 % 		s~   !O <!O  9O1 #>P 5!P > P$ ;>P5 
OO 
O.-O.1
O?>O?
PP
P! P!$
P21P25
QQc                 r    U R                  [        5      nU R                  U5        U R                  U5        g r   )r  ro   r  r   s     r   test_failing_queue#FailingQueueTest.test_failing_queue/  s0     j)""r   )r  )	r,   r-   r.   r/   rM   r  r  r0   r\  r]  s   @r   r}  r}    s    0O@b# #r   r}  c                       \ rS rSr\rSrg)PyFailingQueueTesti9  r1   Nra  r1   r   r   r  r  9  rc  r   r  c                       \ rS rSr\rSrg)CFailingQueueTesti=  r1   Nrf  r1   r   r   r  r  =  rh  r   r  c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 r\" SSSS9S 5       r\" SSSS9S 5       r\" SSSS9S 5       rS rSrg)BaseSimpleQueueTestiB  c                 .    U R                  5       U l        g r   )r   r   r)   s    r   rM   BaseSimpleQueueTest.setUpD  s    !r   c                      UR                  5       nUR                  U5        UR                  5       S:  a'  [        R
                  " UR                  5       S-  5        M_  ! [         a    UR                  U5         g f = f)Ng      ?MbP?)pop
IndexErrorri   randomr&   r'   )r"   r   seqrndsentinelvals         r   feedBaseSimpleQueueTest.feedG  sk    ggi EE#Jzz|c!

3::<$./   hs   A! !A?>A?c                 V     UR                  5       nXC:X  a  g UR                  U5        M)  r   )rk   r   r"   r   r   r  r  s        r   consumeBaseSimpleQueueTest.consumeR  s)    %%'CNN3	 r   c                        UR                  SS9n XC:X  a  g UR                  U5        M+  ! U R                  R                   a    [        R                  " S5         Of = fMb  )NFr]   h㈵>)rk   r   rq   r&   r'   r   r  s        r   consume_nonblock$BaseSimpleQueueTest.consume_nonblockY  sg    %%e%,C NN3  zz'' %JJt$% s   - 0A A c                        UR                  SS9n XC:X  a  g UR                  U5        M+  ! U R                  R                   a     Of = fML  )Nr  r_   )rk   r   rq   r   r  s        r   consume_timeout#BaseSimpleQueueTest.consume_timeoutf  s^    %%%-C NN3  zz''  s   - A
	A
c           
      ~  ^ / nS nUR                  5       nUR                  5         [        R                  " S5      n	/ mU4S jn
[	        U5       Vs/ s H   n[
        R                  " U
" U5      X(X4S9PM"     nn[	        U5       Vs/ s H   n[
        R                  " U
" U5      X&U4S9PM"     nn[        R                  " X-   5          S S S 5        U R                  T5        U R                  UR                  5       5        U R                  UR                  5       S5        U$ s  snf s  snf ! , (       d  f       Nj= f)N*   c                    >^  UU 4S jnU$ )Nc                  h   >  T" U 0 UD6  g ! [          a  nTR                  U5         S nAg S nAff = fr   )BaseExceptionr   )r   kwargsrM  
exceptionsfs      r   wrapperHBaseSimpleQueueTest.run_threads.<locals>.log_exceptions.<locals>.wrapper|  s6    )t&v&$ )%%a(()s    
1,1r1   )r  r  r  s   ` r   log_exceptions7BaseSimpleQueueTest.run_threads.<locals>.log_exceptions{  s    )
 Nr   r~   r   )copyreverser  Randomrn   r   r    r   start_threadsrg   rf   rd   rl   r   )r"   	n_threadsr   inputs	feed_funcconsume_funcr   r  r  r  r  rt   feeders	consumersr  s                 @r   run_threadsBaseSimpleQueueTest.run_threadss  s*   kkmmmB
	 "),.,q ##>)+D*+#)@B, 	 .
 $I.0. %%^L-I,-+AC. 	 0 ++G,?@ A 	$	"A&.0 A@s   'D$'D)D..
D<c                    U R                   nU R                  UR                  5       5        U R                  UR	                  5       S5        UR                  S5        U R                  UR                  5       5        U R                  UR	                  5       S5        UR                  S5        UR                  S5        UR                  S5        U R                  UR                  5       5        U R                  UR	                  5       S5        U R                  UR                  5       S5        U R                  UR	                  5       S5        U R                  UR                  5       S5        U R                  UR	                  5       S5        U R                  UR                  SS9S5        U R                  UR                  5       5        U R                  UR	                  5       S5        U R                  UR                  SS	9S5        U R                  UR                  5       5        U R                  UR	                  5       S5        U R                  U R                  R                  5         UR                  SS9  S S S 5        U R                  U R                  R                  5         UR                  S
S	9  S S S 5        U R                  U R                  R                  5         UR                  5         S S S 5        U R                  UR                  5       5        U R                  UR	                  5       S5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Np= f)Nr   rW   rZ   r   r   Fr]   r%   r_   r  )r   rf   rd   rl   r   ri   rg   r   rk   r   r   r   rq   r   s     r   r   BaseSimpleQueueTest.test_basic  sN   FF	"A&	a#A&	a	Q	a#A&!$A&+A&U+Q/#A&s+Q/	"A&tzz//0EEE 1tzz//0EE$E 1tzz//0LLN 1	"A& 100000s$   /M,M)M$
M
M!$
M2c                     U R                   nUR                  S5        U R                  [        5         UR	                  SS9  S S S 5        g ! , (       d  f       g = fr   )r   ri   r   r   rk   r   s     r   r   :BaseSimpleQueueTest.test_negative_timeout_raises_exception  s>    FF	az*EE"E +**s   A
Ac                     U R                   n[        [        S5      5      nU R                  SXU R                  U R
                  5      nU R                  X25        g )Nr   rW   )r   listrn   r  r  r  rl   )r"   r   r  r   s       r   
test_orderBaseSimpleQueueTest.test_order  sG    FFeCj!""1aDLLI 	)r   2   i  @F)sizememusedry_runc                     U R                   n[        [        S5      5      nU R                  XX0R                  U R
                  5      nU R                  [        U5      U5        g N'  )r   r  rn   r  r  r  rl   r  r"   r  r   r  r   s        r   test_many_threads%BaseSimpleQueueTest.test_many_threads  sM     FFeEl#""4FIIt||L 	&1r   c                     U R                   n[        [        S5      5      nU R                  XUU R                  U R
                  5      nU R                  [        U5      U5        g r  )r   r  rn   r  r  r  rl   r  r  s        r   test_many_threads_nonblock.BaseSimpleQueueTest.test_many_threads_nonblock  sU     FFeEl#""4F#'99d.C.CE 	&1r   c                     U R                   n[        [        S5      5      nU R                  XUU R                  U R
                  5      nU R                  [        U5      U5        g )Ni  )r   r  rn   r  r  r  rl   r  r  s        r   test_many_threads_timeout-BaseSimpleQueueTest.test_many_threads_timeout  sU     FFeDk"""4F#'99d.B.BD 	&1r   c                 0    " S S5      nSnU R                   n[        U5       H  nUR                  U" 5       5        M     [        U5       HG  n[        R                  " UR                  5       5      n[        5         U R                  U" 5       5        MI     g )Nc                       \ rS rSrSrg).BaseSimpleQueueTest.test_references.<locals>.Ci  r1   Nr{  r1   r   r   Cr    s    r   r     )r   rn   ri   weakrefrefrk   r   assertIsNone)r"   r  Nr   rt   wrs         r   test_references#BaseSimpleQueueTest.test_references  sn    	 	 FFqAEE!#J qAQUUW%BLbd# r   r   N)r,   r-   r.   r/   rM   r  r  r  r  r  r   r   r  r   r  r  r  r  r0   r1   r   r   r  r  B  s    "	0   @#'J* R	592 :2 R	592 :2 R	592 :2$r   r  c                   ,   ^  \ rS rSr\rU 4S jrSrU =r$ )PySimpleQueueTesti  c                 X   > U R                   R                  U l        [        TU ]  5         g r   )r   _PySimpleQueuer   rW  rM   rX  s    r   rM   PySimpleQueueTest.setUp  s    22r   rZ  )	r,   r-   r.   r/   rb  r   rM   r0   r\  r]  s   @r   r  r    s    E r   r  c                   8   ^  \ rS rSr\rU 4S jrS rS rSr	U =r
$ )CSimpleQueueTesti  c                 X   > U R                   R                  U l        [        TU ]  5         g r   )r   SimpleQueuer   rW  rM   rX  s    r   rM   CSimpleQueueTest.setUp  s    //r   c                     U R                  U R                  U R                  R                  5        U R                  U R                  U R                  R                  5        g r   )assertIsr   r   r  r)   s    r   test_is_default CSimpleQueueTest.test_is_default  s:    dnndjj&<&<=dnndjj&<&<=r   c           	      b  ^^ U R                   m[        R                  " 5       mSn/ n " UU4S jS[        5      n U" 5       nTR	                  [        T5      5        AUR                  TR                  5       5        US   U:  a  OMM  U R                  U[        [        US-   5      5      5        g )Nr  c                   *   > \ rS rSrS rU U4S jrSrg)2CSimpleQueueTest.test_reentrancy.<locals>.Circulari  c                     X l         g r   circularr)   s    r   r!   ;CSimpleQueueTest.test_reentrancy.<locals>.Circular.__init__  s     $r   c                 :   > TR                  [        T5      5        g r   )ri   next)r"   genr   s    r   __del__:CSimpleQueueTest.test_reentrancy.<locals>.Circular.__del__  s    d3i r   r  N)r,   r-   r.   r/   r!   r  r0   )r  r   s   r   Circularr    s    %! !r   r	  r   rW   )r   	itertoolsr   objectri   r  r   rk   rl   r  rn   )r"   r  r   r	  or  r   s        @@r   test_reentrancy CSimpleQueueTest.test_reentrancy  s     FFoo
	! 	!v 	! 
AEE$s)NN1557#r{a  	$uQU|"45r   rZ  )r,   r-   r.   r/   rg  r   rM   r  r  r0   r\  r]  s   @r   r  r    s     E>6 6r   r  __main__),r
  r  sysr   r&   unittestr  test.supportr   r   r   r   requires_working_threadingimport_fresh_modulerb  rg  
skipUnlessneed_c_queuero   r   r    r   r3   rG   rU  TestCaser`  re  rj  rn  rp  rr  rv  rx  rL  rz  r}  r  r  r  r  r  r,   mainr1   r   r   <module>r     s*     
     / & )  + +4 8,,WxjI

+
+GH:
F""7,DE
4Y%% @F FDq?* q?h" )X..  H--  & mX%6%6  ]H$5$5  * +X->->  *H,=,=  
 -I ,q#( q#j)8+<+<  ((*;*;  q$ q$h+X->->  &6*H,=,= &6 &6R zMMO r   