
    dafuR                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	  e	j                  d        ej                  ddg	      Z ej                  ddg
      Z ej                  ed      ZdZd Z G d dej$                        Z G d d      Z G d de      Z G d de      Z G d deej.                        Ze G d deej.                               Z G d de      Z G d deej.                        Ze G d deej.                               Z G d  d!e      Z G d" d#eej.                        Ze G d$ d%eej.                               Z G d& d'e       Z! G d( d)e      Z" G d* d+e"ej.                        Z#e G d, d-e"ej.                               Z$ G d. d/      Z% G d0 d1e%ej.                        Z&e G d2 d3e%ej.                               Z'e(d4k(  r ejR                          yy)5    N)
gc_collect)import_helper)threading_helperT)modulequeue_queue)blocked)freshzNo _queue module found   c                 ^    | j                   dkD  xr | j                         | j                   k(  S Nr   )maxsizeqsize)qs    */root/Python-3.12.4/Lib/test/test_queue.pyqfullr      s$    99q=3QWWY!))33    c                       e Zd Zd Zd Zy)_TriggerThreadc                     || _         || _        t        j                         | _        t        j
                  j                  |        y N)fnargs	threadingEventstartedEventThread__init__)selfr   r   s      r   r   z_TriggerThread.__init__   s3    	%OO-!!$'r   c                     t        j                  d       | j                  j                           | j                  | j
                    y )N皙?)timesleepr   setr   r   r   s    r   runz_TriggerThread.run!   s3     	

3r   N)__name__
__module____qualname__r   r&    r   r   r   r      s    (r   r   c                       e Zd Zd Zd Zy)BlockingTestMixinc                 "   t        ||      }|j                          	  || | _        |j                  j	                         s| j                  d|z         | j                  t        j                  |       S # t        j                  |       w xY w)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_testz"BlockingTestMixin.do_blocking_test<   sv    l;	1$j1DK&&--/		F$% &;;((0((0s   AA7 7Bc                    t        ||      }|j                          	 	  ||  | j                  d|z         	 t        j                  |       |j
                  j                         s| j                  d       y y # |$ r  w xY w# t        j                  |       |j
                  j                         s| j                  d       w w xY w)Nzexpected exception of kind %rz(trigger thread ended but event never set)r   r.   r1   r   r2   r   r0   )r   r3   r4   r5   r6   expected_exception_classr7   s          r   do_exceptional_blocking_testz.BlockingTestMixin.do_exceptional_blocking_testJ   s    l;	F;J' 		9!9: ; ((0&&--/		DE 0 ,  ((0&&--/		DE 0s   A; B ;BB ACN)r'   r(   r)   r8   r;   r*   r   r   r,   r,   :   s    1Fr   r,   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)BaseQueueTestMixinc                 D    d| _         t        j                         | _        y r   )cumr   Lockcumlockr%   s    r   setUpzBaseQueueTestMixin.setUp]   s     ~~'r   c                    |j                         rt        d      | j                  |j                                | j	                  |j                                |j                  d       |j                  d       |j                  d       t        g dg dg d      }|j                         |j                         |j                         g}| j                  |||j                  j                     d	       t        t        d
z
        D ]3  }|j                  |       | j                  |j                         d       5 | j                  t        |       d       dt        z  }dt        z  }|j                  |       | j                  t        |      d       | j	                  |j                                | j                  |j                                	 |j                  |d       | j                  d       	 |j                  |d       | j                  d       | j%                  |j                  |f|j                  d       | j%                  |j                  |ddf|j                  d       t        t              D ]  }|j                           | j                  |j                          d       	 |j                  d       | j                  d       	 |j                  d       | j                  d       | j%                  |j                  d|j                  d       | j%                  |j                  d|j                  d       y # | j                   j"                  $ r Y sw xY w# | j                   j"                  $ r Y nw xY w# | j                   j&                  $ r Y w xY w# | j                   j&                  $ r Y w xY w)N&Call this function with an empty queueo   M     )rE   rF   rG   )rG   rF   rE   )rE   rG   rF   )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 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)TrU   )r   RuntimeError
assertTruerX   assertFalsefullputdictgetassertEqual	__class__r'   range
QUEUE_SIZEr   r1   r   Fullr8   Empty)r   r   target_orderactual_orderilastr\   s          r   basic_queue_testz#BaseQueueTestMixin.basic_queue_testa   s   779GHH	""	c
	c
	c
O(7,;= !%%'2|AKK4H4H'IA	Cz!|$ 	DAEE!HOOAGGI'BC	D 	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  $M6 >#N "#N5 M32M36NNN21N25OOc                     	 |j                         }|dk  r|j                          y | j                  5  | xj                  |z  c_        d d d        |j                          a# 1 sw Y   xY wr   )r_   	task_donerA   r?   )r   r   xs      r   workerzBaseQueueTestMixin.worker   sZ    A1u AKKM 
 s   A##A,c                    d| _         g }dD ]E  }t        j                  | j                  |f      }|j	                          |j                  |       G t        d      D ]  }|j                  |        |j                          | j                  | j                   t        t        d            d       dD ]  }|j                  d        |j                          |D ]  }|j                           y )Nr   )r   rK   targetr   d   z0q.join() did not block until all tasks were done)r?   r   r   rn   r.   appendrb   r]   joinr`   sum)r   r   threadsrh   r7   s        r   queue_join_testz"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                     | j                         }	 |j                          | j                  d       y # t        $ r Y y w xY wNz(Did not detect task count going negative)	type2testrl   r1   
ValueErrorr   r   s     r   test_queue_task_donez'BaseQueueTestMixin.test_queue_task_done   s@    NN	BKKM II@A  		s   4 	A A c                     | j                         }| j                  |       | j                  |       	 |j                          | j                  d       y # t        $ r Y y w xY wrz   )r{   rx   rl   r1   r|   r}   s     r   test_queue_joinz"BaseQueueTestMixin.test_queue_join   s^     NNQQ	BKKM II@A  		s   A 	A"!A"c                 r    | j                  t              }| j                  |       | j                  |       y r   )r{   rc   rj   r}   s     r   
test_basiczBaseQueueTestMixin.test_basic   s.     NN:&a a r   c                 "   | j                  t              }| j                  t              5  |j	                  dd       d d d        | j                  t              5  |j                  dd       d d d        y # 1 sw Y   ;xY w# 1 sw Y   y xY wNrK   rs   rS   )r{   rc   assertRaisesr|   r]   r_   r}   s     r   &test_negative_timeout_raises_exceptionz9BaseQueueTestMixin.test_negative_timeout_raises_exception   s{    NN:&z* 	!EE!RE 	!z* 	!EE!RE 	! 	!	! 	!	! 	!s   A9B9BBc                    | j                  t              }t        t              D ]  }|j                  d        | j	                  | j
                  j                        5  |j                  d       d d d        t        t              D ]  }|j                           | j	                  | j
                  j                        5  |j                          d d d        y # 1 sw Y   lxY w# 1 sw Y   y xY w)NrK   )	r{   rc   rb   
put_nowaitr   r   rd   
get_nowaitre   r   r   rh   s      r   test_nowaitzBaseQueueTestMixin.test_nowait   s    NN:&z" 	ALLO	tzz/ 	LLO	 z" 	ALLN	tzz//0 	LLN	 		 	
	 	s    CC)C&)C2c                    | j                  d      }|j                  d       |j                  d       |j                  d       | j                  | j                  j                        5  |j                  d       d d d        | j                  |j                         d       d|_        | j                  | j                  j                        5  |j                  d       d d d        y # 1 sw Y   pxY w# 1 sw Y   y xY w)N   rK   rN      )	r{   r]   r   r   rd   r   r`   r   r   r}   s     r   test_shrinking_queuez'BaseQueueTestMixin.test_shrinking_queue   s    NN1	a	a	atzz/ 	LLO	A&	tzz/ 	LLO	 			 		 	s   *C+C7+C47D N)r'   r(   r)   rB   rj   rn   rx   r~   r   r   r   r   r   r*   r   r   r=   r=   \   s8    (6Dr$BB!!
r   r=   c                        e Zd Z fdZ xZS )	QueueTestc                 X    | j                   j                  | _        t        |           y r   )r   rH   r{   superrB   r   ra   s    r   rB   zQueueTest.setUp   s    ))r   r'   r(   r)   rB   __classcell__ra   s   @r   r   r           r   r   c                       e Zd ZeZy)PyQueueTestNr'   r(   r)   py_queuer   r*   r   r   r   r          Er   r   c                       e Zd ZeZy)
CQueueTestNr'   r(   r)   c_queuer   r*   r   r   r   r          Er   r   c                        e Zd Z fdZ xZS )LifoQueueTestc                 X    | j                   j                  | _        t        |           y r   )r   rI   r{   r   rB   r   s    r   rB   zLifoQueueTest.setUp  s    --r   r   r   s   @r   r   r     r   r   r   c                       e Zd ZeZy)PyLifoQueueTestNr   r*   r   r   r   r   
  r   r   r   c                       e Zd ZeZy)CLifoQueueTestNr   r*   r   r   r   r     r   r   r   c                        e Zd Z fdZ xZS )PriorityQueueTestc                 X    | j                   j                  | _        t        |           y r   )r   rJ   r{   r   rB   r   s    r   rB   zPriorityQueueTest.setUp  s    11r   r   r   s   @r   r   r     r   r   r   c                       e Zd ZeZy)PyPriorityQueueTestNr   r*   r   r   r   r     r   r   r   c                       e Zd ZeZy)CPriorityQueueTestNr   r*   r   r   r   r     r   r   r   c                       e Zd Zy)FailingQueueExceptionNr'   r(   r)   r*   r   r   r   r   $  s    r   r   c                   *     e Zd Z fdZd Zd Z xZS )FailingQueueTestc                 x    | j                   j                   G fdd      }|| _        t        |           y )Nc                   ,    e Zd Z fdZ fdZ fdZy),FailingQueueTest.setUp.<locals>.FailingQueuec                 H    d| _         d| _         j                  | g|  y )NF)fail_next_putfail_next_getr   )r   r   rH   s     r   r   z5FailingQueueTest.setUp.<locals>.FailingQueue.__init__.  s&    %*"%*"t+d+r   c                 d    | j                   rd| _         t        d      j                  | |      S NFzYou Lose)r   r   _put)r   itemrH   s     r   r   z1FailingQueueTest.setUp.<locals>.FailingQueue._put2  s0    %%).D&/
;;zz$--r   c                 b    | j                   rd| _         t        d      j                  |       S r   )r   r   _get)r   rH   s    r   r   z1FailingQueueTest.setUp.<locals>.FailingQueue._get7  s.    %%).D&/
;;zz$''r   N)r'   r(   r)   r   r   r   )rH   s   r   FailingQueuer   -  s    ,.
(r   r   )r   rH   r   r   rB   )r   r   rH   ra   s     @r   rB   zFailingQueueTest.setUp)  s1    

  	(5 	(  )r   c                 \   |j                         rt        d      t        t        dz
        D ]  }|j	                  |        d|_        	 |j	                  dd       | j                  d       d|_        	 |j	                  dd	       | j                  d       |j	                  d
       | j                  t        |      d       d|_        	 | j                  |j                  d|j                  d       | j                  d       |j	                  d
       d|_        	 | j                  |j                  d|j                  dt               | j                  d       |j	                  d
       | j                  t        |      d       |j                          | j                  t        |       d       |j	                  d
       | j                  t        |      d       | j                  |j                  d|j                  d       t        t              D ]  }|j                           | j                  |j                          d       |j	                  d       d|_        	 |j                          | j                  d       | j                  |j                         d       d|_        	 |j                  d	       | j                  d       | j                  |j                         d       |j                          | j                  |j                          d       d|_        	 | j                  |j                  d|j                  dt               | j                  d       | j                  |j                         d       |j                          | j                  |j                          d       y # t        $ r Y [w xY w# t        $ r Y ?w xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y w xY w# t        $ r Y Ew xY w# t        $ r Y w xY w)NrD   rK   Toopsr   rQ   z)The queue didn't fail when it should haver!   rS   ri   rP   )r\   r*   )r\   TrU   rM   rV   firstrL   rW   )r   rY   rb   rc   r]   r   r1   r   rZ   r   r8   r_   r;   r   r   s      r   failing_queue_testz#FailingQueueTest.failing_queue_testA  sv   779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~   $N? 8$O 9O ">O/ *!O? 3#P />P ?	OO	OO	O,+O,/	O<;O<?	PP	PP	P+*P+c                 r    | j                  t              }| j                  |       | j                  |       y r   )r   rc   r   r}   s     r   test_failing_queuez#FailingQueueTest.test_failing_queue  s0     j)""r   )r'   r(   r)   rB   r   r   r   r   s   @r   r   r   '  s    0O@b#r   r   c                       e Zd ZeZy)PyFailingQueueTestNr   r*   r   r   r   r     r   r   r   c                       e Zd ZeZy)CFailingQueueTestNr   r*   r   r   r   r     r   r   r   c                   Z    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)BaseSimpleQueueTestc                 .    | j                         | _        y r   )r{   r   r%   s    r   rB   zBaseSimpleQueueTest.setUp  s    !r   c                     	 	 |j                         }|j                  |       |j                         dkD  r&t	        j
                  |j                         dz         \# t        $ r |j                  |       Y y w xY w)Ng      ?MbP?)pop
IndexErrorr]   randomr"   r#   )r   r   seqrndsentinelvals         r   feedzBaseSimpleQueueTest.feed  sk    ggi EE#Jzz|c!

3::<$./   hs   A A;:A;c                 T    	 |j                         }||k(  ry |j                  |       (r   )r_   rt   r   r   resultsr   r   s        r   consumezBaseSimpleQueueTest.consume  s+    %%'ChNN3	 r   c                     	 	 	 |j                  d      }	 ||k(  ry |j                  |       -# | j                  j                  $ r t        j                  d       Y nw xY wa)NFrQ   h㈵>)r_   r   re   r"   r#   rt   r   s        r   consume_nonblockz$BaseSimpleQueueTest.consume_nonblock  si    %%e%,C hNN3  zz'' %JJt$% s   / .A A c                     	 	 	 |j                  d      }	 ||k(  ry |j                  |       -# | j                  j                  $ r Y nw xY wL)Nr   rS   )r_   r   re   rt   r   s        r   consume_timeoutz#BaseSimpleQueueTest.consume_timeout  s`    %%%-C hNN3  zz''  s   / A
Ac           
      r   g }d }|j                         }|j                          t        j                  d      }	g fd}
t	        |      D cg c]#  }t        j                   |
|      |||	|f      % }}t	        |      D cg c]"  }t        j                   |
|      |||f      $ }}t        j                  ||z         5  	 d d d        | j                         | j                  |j                                | j                  |j                         d       |S c c}w c c}w # 1 sw Y   exY w)N*   c                       fd}|S )Nc                  f    	  | i | y # t         $ r}j                  |       Y d }~y d }~ww xY wr   )BaseExceptionrt   )r   kwargse
exceptionsfs      r   wrapperzHBaseSimpleQueueTest.run_threads.<locals>.log_exceptions.<locals>.wrapper  s6    )t&v&$ )%%a(()s    	0+0r*   )r   r   r   s   ` r   log_exceptionsz7BaseSimpleQueueTest.run_threads.<locals>.log_exceptions  s    )
 Nr   rp   r   )copyreverser   Randomrb   r   r   r   start_threadsr[   rZ   rX   r`   r   )r   	n_threadsr   inputs	feed_funcconsume_funcr   r   r   r   r   rh   feeders	consumersr   s                 @r   run_threadszBaseSimpleQueueTest.run_threads  s1   kkmmmB
	 "),. ##>)+D*+S#x)@B . .
 $I.0 %%^L-I,-w+AC 0	 0 ++Gi,?@ 		 	$	"A&.0	 	s   (D#'D(D--D6c                    | j                   }| j                  |j                                | j                  |j	                         d       |j                  d       | j                  |j                                | j                  |j	                         d       |j                  d       |j                  d       |j                  d       | j                  |j                                | j                  |j	                         d       | j                  |j                         d       | j                  |j	                         d       | j                  |j                         d       | j                  |j	                         d       | j                  |j                  d      d       | j                  |j                                | j                  |j	                         d       | j                  |j                  d	      d       | j                  |j                                | j                  |j	                         d       | j                  | j                  j                        5  |j                  d       d d d        | j                  | j                  j                        5  |j                  d
	       d d d        | j                  | j                  j                        5  |j                          d d d        | j                  |j                                | j                  |j	                         d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   axY w)Nr   rK   rN   r   r   FrQ   r!   rS   r   )r   rZ   rX   r`   r   r]   r[   r   r_   r   r   r   re   r}   s     r   r   zBaseSimpleQueueTest.test_basic  sg   FF	"A&	a#A&	a	Q	a#A&!$A&+A&U+Q/#A&s+Q/	"A&tzz//0 	EEE	tzz//0 	 EE$E	 tzz//0 	LLN		"A&	 		  	 	 	s$   5M5M5M&MM#&M/c                     | j                   }|j                  d       | j                  t              5  |j	                  d       d d d        y # 1 sw Y   y xY wr   )r   r]   r   r|   r_   r}   s     r   r   z:BaseSimpleQueueTest.test_negative_timeout_raises_exception  sG    FF	az* 	EE"E	 	 	s   AAc                     | j                   }t        t        d            }| j                  d||| j                  | j
                        }| j                  ||       y )Nrr   rK   )r   listrb   r   r   r   r`   )r   r   r   r   s       r   
test_orderzBaseSimpleQueueTest.test_order!  sK    FFeCj!""1aDLLI 	&)r   c                     d}| j                   }t        t        d            }| j                  |||| j                  | j
                        }| j                  t        |      |       y N2   '  )r   r   rb   r   r   r   r`   sortedr   Nr   r   r   s        r   test_many_threadsz%BaseSimpleQueueTest.test_many_threads*  sT    FFeEl#""1aDLLI 	&1r   c                     d}| j                   }t        t        d            }| j                  |||| j                  | j
                        }| j                  t        |      |       y r   )r   r   rb   r   r   r   r`   r  r  s        r   test_many_threads_nonblockz.BaseSimpleQueueTest.test_many_threads_nonblock5  sZ    FFeEl#""1a#'99d.C.CE 	&1r   c                     d}| j                   }t        t        d            }| j                  |||| j                  | j
                        }| j                  t        |      |       y )Nr   i  )r   r   rb   r   r   r   r`   r  r  s        r   test_many_threads_timeoutz-BaseSimpleQueueTest.test_many_threads_timeout?  sZ    FFeDk"""1a#'99d.B.BD 	&1r   c                 &    G d d      }d}| j                   }t        |      D ]  }|j                   |               t        |      D ]E  }t        j                  |j                               }t                | j                   |              G y )Nc                       e Zd Zy).BaseSimpleQueueTest.test_references.<locals>.CNr   r*   r   r   Cr  L  s    r   r     )r   rb   r]   weakrefrefr_   r   assertIsNone)r   r  r  r   rh   wrs         r   test_referencesz#BaseSimpleQueueTest.test_referencesI  sx    	 	 FFq 	AEE!#J	q 	$AQUUW%BLbd#	$r   N)r'   r(   r)   rB   r   r   r   r   r   r   r   r   r  r  r	  r  r*   r   r   r   r     sE    "	0   @#'J*	222$r   r   c                   "     e Zd ZeZ fdZ xZS )PySimpleQueueTestc                 X    | j                   j                  | _        t        |           y r   )r   _PySimpleQueuer{   r   rB   r   s    r   rB   zPySimpleQueueTest.setUp\  s    22r   )r'   r(   r)   r   r   rB   r   r   s   @r   r  r  Y  s    E r   r  c                   .     e Zd ZeZ fdZd Zd Z xZS )CSimpleQueueTestc                 X    | j                   j                  | _        t        |           y r   )r   SimpleQueuer{   r   rB   r   s    r   rB   zCSimpleQueueTest.setUpf  s    //r   c                     | j                  | j                  | j                  j                         | j                  | j                  | j                  j                         y r   )assertIsr{   r   r  r%   s    r   test_is_defaultz CSimpleQueueTest.test_is_defaultj  s:    dnndjj&<&<=dnndjj&<&<=r   c           	      Z   | j                   t        j                         d}g } G fddt              }	  |       }j	                  t                     ~|j                  j                                |d   |k\  rnK| j                  |t        t        |dz                      y )Nr  c                        e Zd Zd Z fdZy)2CSimpleQueueTest.test_reentrancy.<locals>.Circularc                     | | _         y r   )circularr%   s    r   r   z;CSimpleQueueTest.test_reentrancy.<locals>.Circular.__init__z  s	     $r   c                 :    j                  t                     y r   )r]   next)r   genr   s    r   __del__z:CSimpleQueueTest.test_reentrancy.<locals>.Circular.__del__}  s    d3i r   N)r'   r(   r)   r   r'  )r&  r   s   r   Circularr!  y  s    %!r   r(  rs   rK   )r   	itertoolscountobjectr]   r%  rt   r_   r`   r   rb   )r   r  r   r(  or&  r   s        @@r   test_reentrancyz CSimpleQueueTest.test_reentrancyn  s     FFoo
	!v 	! 
AEE$s)NN1557#r{a  	$uQU|"45r   )	r'   r(   r)   r   r   rB   r  r-  r   r   s   @r   r  r  a  s     E>6r   r  __main__)*r)  r   r   r"   unittestr  test.supportr   r   r   requires_working_threadingimport_fresh_moduler   r   
skipUnlessneed_c_queuerc   r   r   r   r,   r=   r   TestCaser   r   r   r   r   r   r   r   	Exceptionr   r   r   r   r   r  r  r'   mainr*   r   r   <module>r8     s2         # & ) ,  + +4 8,=,,WxjI
+-
+
+GH:
F"x""7,DE
4Y%% @F FDV* Vp" )X..  H--  & mX%6%6  ]H$5$5  * +X->->  *H,=,=  
 -I ,q#( q#j)8+<+<  ((*;*;  q$ q$h+X->->  &6*H,=,= &6 &6R zHMMO r   