
    daf:                        d Z ddlZddlZddlmZ d Z G d dej                        Z G d dej                        Z G d	 d
ej                        Z	 G d dej                        Z
 G d dej                        Z G d d      Z G d deej                        Z G d deej                        Z G d deej                        Zedk(  r ej"                          yy)zTests for queues.py    N)GenericAliasc                  .    t        j                  d        y N)asyncioset_event_loop_policy     8/root/Python-3.12.4/Lib/test/test_asyncio/test_queues.pytearDownModuler      s    !!$'r	   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
QueueBasicTestsc                   K   t        j                         }| j                   ||      j                  d       ||             t	        t        |             ||      v }| j                  ||       t        j                         }t        j                         4 d{   }|j                  |j                               }t        j                  d       d{    | j                  d ||      v        |j                  d       ddd      d{    | j                  d d{          t        j                  d      }t        j                         4 d{   }|j                  d       |j                  |j                  d            }t        j                  d       d{    | j                  d ||      v        |j                          ddd      d{    | j                  j                                t        j                         }|j                  d       | j                  d	 ||      v        y7 7 t7 =# 1 d{  7  sw Y   NxY w7 @7 7 7 # 1 d{  7  sw Y   xY ww)
zTest Queue's repr or str.

        fn is repr or str. expect_id is True if we expect the Queue's id to
        appear in fn(Queue()).
        z<QueueNr   z_getters[1]   maxsize   z_putters[1]z
_queue=[1])r   Queue
assertTrue
startswithhexidassertEqual	TaskGroupcreate_taskgetsleep
put_nowaitput
get_nowaitdone)selffn	expect_idqid_is_presenttggetterputters           r
   _test_repr_or_strz!QueueBasicTests._test_repr_or_str   s     MMO1((2BqE:BqE
be+M2 MMO$$& 	 	"^^AEEG,F--"""OOMRU23LLO	 	 	&L) MM!$$$& 	 	"LLO^^AEE!H-F--"""OOMRU23LLN	 	 	&MMO	Q1-.7	 #		 	 	 	 )	
 #	 	 	 	s   BJ	IJ	"8II.I	J	IJ	*I*
+6J	!I-"J	%A
I4/I00-I4J	(I2)A#J	IJ	I'II'"	J	-J	0I42J	4J:I=;JJ	c                 L   K   | j                  t        d       d {    y 7 wNT)r)   reprr!   s    r
   	test_reprzQueueBasicTests.test_repr8   s     $$T4000   $"$c                 L   K   | j                  t        d       d {    y 7 w)NF)r)   strr-   s    r
   test_strzQueueBasicTests.test_str;   s     $$S%000r/   c                     t         j                  t           }| j                  |j                  t        f       | j                  |t               y r   )r   r   intr   __args__assertIsInstancer   r!   r$   s     r
   test_generic_aliasz"QueueBasicTests.test_generic_alias>   s6    MM#cV,a.r	   c                 x  K   t        j                         }| j                  |j                                |j	                  d       d {    | j                  |j                                | j                  d|j                          d {          | j                  |j                                y 7 k7 *wNr   )r   r   r   emptyr   assertFalser   r   r7   s     r
   
test_emptyzQueueBasicTests.test_emptyC   sy     MMO	"eeAh#!%%'M*	" 	)s%   AB:
B6AB:B8
)B:8B:c                   K   t        j                         }| j                  |j                                t        j                  d      }|j	                  d       d {    | j                  |j                                y 7 $w)Nr   r   )r   r   r<   fullr   r   r7   s     r
   	test_fullzQueueBasicTests.test_fullK   sY     MMO"MM!$eeAh! 	s   AB B!%Bc                 
  K   t        j                         }dD ]  }|j                  |       d {     t        d      D cg c]  }|j	                          d {    }}| j                  g d|       y 7 I7 c c}w w)Nr      r   rC   )r   r   r   ranger   r   r!   r$   i_itemss        r
   
test_orderzQueueBasicTests.test_orderS   sn     MMO 	A%%(NN	 ).a11quuw11E* 13   .BA:BA>A<
A>#B<A>>Bc                   K   t        j                  d      | j                  dj                         g fd}t        j                   |             }t        d      D ]  }t        j                  d       d {    ! | j                  ddg       | j                  dj                          d {          t        j                  d       d {    | j                  g d       | j                  dj                          d {          | j                  dj                          d {          | j                  |j                                | j                  |j                                y 7 7 7 7 v7 Pw)Nr   r   c                     K   t        d      D ],  } j                  |        d {    j                  |        . y7 w)NrC   T)rD   r   append)rF   have_been_putr$   s    r
   r(   z,QueueBasicTests.test_maxsize.<locals>.putter`   sA     1X (eeAh$$Q'(  s   #A?Ar   r   )r   r   r   )r   r   r   r   r   rD   r   r   r   r    result)r!   r(   trF   rN   r$   s       @@r
   test_maxsizezQueueBasicTests.test_maxsize[   s+    MM!$AII&	 )q 	#A--"""	# 	!Q/!%%'M* mmAM2!%%'M*!%%'M*!
# # * 	))s[   A;F?F 9F9F
: FF7FF	
'F:F
;AFFF	FFN)__name__
__module____qualname__r)   r.   r2   r8   r=   r@   rI   rQ   r   r	   r
   r   r      s+    (/T11/
#"+$r	   r   c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)QueueGetTestsc                    K   t        j                         }|j                  d       | j                  d|j	                          d {          y 7 	wr:   )r   r   r   r   r   r7   s     r
   test_blocking_getzQueueGetTests.test_blocking_getz   s6     MMO	Q!%%'M*Ms   AAA

Ac                   K   t        j                         }t        j                  d      }|j                  d       d {    |j	                         }|j
                  j                  |       | j                  d|j                          d {          | j                  |j                                | j                  |j                                y 7 7 Iwr:   )r   get_running_loopr   r   create_future_puttersrM   r   r   r   r    assertIsNonerO   )r!   loopr$   waiters       r
   test_get_with_puttersz#QueueGetTests.test_get_with_putters   s     '')MM!eeAh##%	

&!!%%'M*&&--/* 	
 *s%   >C CACC
ACCc                   K   t        j                         }t        j                         t        j                         dfd}t        j                   |             }j                          d {    | j                         |j                  dj                  d       | d {   }| j                         | j                  d|       y 7 `7 *w)NFc                  h   K   j                          j                          d {   } d| S 7 wr+   )setr   )resfinishedr$   starteds    r
   	queue_getz7QueueGetTests.test_blocking_get_wait.<locals>.queue_get   s,     KKM-CHJ  s   $20	2{Gz?r   )r   rZ   r   Eventr   waitr<   
call_laterr   r   r   )r!   r^   rg   queue_get_taskrd   re   r$   rf   s        @@@r
   test_blocking_get_waitz$QueueGetTests.test_blocking_get_wait   s     '')MMO--/	 !,,Y[9lln"allA.""!C  	 #s$   A3C8C97C0C1)CCc                     t        j                         }|j                  d       | j                  d|j	                                y r:   r   r   r   r   r   r7   s     r
   test_nonblocking_getz"QueueGetTests.test_nonblocking_get   .    MMO	QALLN+r	   c                     t        j                         }| j                  t         j                  |j                         y r   )r   r   assertRaises
QueueEmptyr   r7   s     r
   test_nonblocking_get_exceptionz,QueueGetTests.test_nonblocking_get_exception   s'    MMO',,all;r	   c                 F  K   t        j                         }t        j                  |j                               }t        j                  |j                               }t        j                  d       d {    |j                          t        j                  d       d {    | j                  |j                                |j                  d       d {    t        j                  d       d {    | j                  d| d {          y 7 7 v7 @7 %7 wNr   a)
r   r   r   r   r   cancelr   r    r   r   )r!   r$   t1t2s       r
   test_get_cancelled_racez%QueueGetTests.test_get_cancelled_race   s     MMO  )  )mmA
		mmA	"eeCjmmABh' 	&sZ   A3D!5D6,D!"D#7D!DD!7D8D!D

D!D!D!D!D!c                 p  K   t        j                  d      }t        j                  |j                  d             t        j                  |j                  d             | j	                  |j                          d {   d       | j	                  |j                          d {   d       y 7 27 w)Nr   r   rx   b)r   r   r   r   r   r   r7   s     r
   test_get_with_waiting_puttersz+QueueGetTests.test_get_with_waiting_putters   sy     MM!$AEE#J'AEE#J'quuw,quuw, '&s$   A=B6?B2 'B6'B4(B64B6c                 2  K   d }d }d}t        j                  d      }t        j                         4 d {   }|j                   |||             |j                   |||             d d d       d {    y 7 E7 # 1 d {  7  sw Y   y xY ww)Nc                 `   K   t        |      D ]  }| j                          d {     y 7 wr   )rD   r   )queuenum_expectedrG   s      r
   consumerz<QueueGetTests.test_why_are_getters_waiting.<locals>.consumer   s,     <( "iik!!"!s   ".,.c                 b   K   t        |      D ]  }| j                  |       d {     y 7 wr   )rD   r   )r   	num_itemsrF   s      r
   producerz<QueueGetTests.test_why_are_getters_waiting.<locals>.producer   s.     9% #iil""#"s   #/-/   r   r   r   r   r   )r!   r   r   producer_num_itemsr$   r&   s         r
   test_why_are_getters_waitingz*QueueGetTests.test_why_are_getters_waiting   s     	"	# MM!$$& 	< 	<"NN8A'9:;NN8A'9:;	< 	< 	< 	< 	< 	< 	<sD   6BA>B1B-B8B 9B BBB	BBc                 2  K   t        j                  d      }| j                  t              5  t        j                  |j                         d       d {    d d d        | j                  t        |j                        d       y 7 2# 1 sw Y   1xY ww)Nr   r   g?r   )	r   r   rs   TimeoutErrorwait_forr   r   len_getters)r!   r   s     r
   5test_cancelled_getters_not_being_held_in_self_getterszCQueueGetTests.test_cancelled_getters_not_being_held_in_self_getters   ss     a(|, 	5""599;444	5 	U^^,a0 5	5 	5s.   ,B(BB	B.B	BBBN)rR   rS   rT   rX   r`   rm   rp   ru   r|   r   r   r   r   r	   r
   rV   rV   x   s/    ++!*,
<(-< 1r	   rV   c                   `    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d Zy)QueuePutTestsc                    K   t        j                         }|j                  d       d {    | j                  d|j	                          d {          y 7 -7 wr:   )r   r   r   r   r   r7   s     r
   test_blocking_putzQueuePutTests.test_blocking_put   sC     MMO eeAh!%%'M* 	)s!   )AA#AA

AAc                   K   t        j                  d      t        j                         dfd}t        j                         }|j	                  dj
                         t        j                   |             }j                          d {    | j                         | d {    | j                         y 7 17 w)Nr   r   Fc                     K   j                          j                  d       d {    j                  d       d {    d y 7  7 	w)Nr   r   T)rc   r   )re   r$   rf   s   r
   	queue_putz7QueuePutTests.test_blocking_put_wait.<locals>.queue_put   s<     KKM%%(NN%%(NNH s!   %AA	AAAArh   )
r   r   ri   rZ   rk   r   r   rj   r<   r   )r!   r   r^   queue_put_taskre   r$   rf   s       @@@r
   test_blocking_put_waitz$QueuePutTests.test_blocking_put_wait   s     MM!$--/	 '')all+ ,,Y[9lln"! 	s$   BCCC1C
2C
Cc                     t        j                         }|j                  d       | j                  d|j	                                y r:   ro   r7   s     r
   test_nonblocking_putz"QueuePutTests.test_nonblocking_put   rq   r	   c                   K   t        j                         }t        j                  |j                               }t        j                  d       d {    |j                  d       |j                  d       |j                          	 | d {    |j                         }| j                  d|       y 7 d7 )# t         j                  $ r1 t        j                  |j                               }| d {  7   Y jw xY wwNr   r   r   )
r   r   r   r   r   r   ry   CancelledErrorrO   r   )r!   r$   readerrO   s       r
   'test_get_cancel_drop_one_pending_readerz5QueuePutTests.test_get_cancel_drop_one_pending_reader   s     MMO$$QUUW-mmA	Q	Q	LL F# 	 %% 	((1FLL	sT   ADB76D
B; B9B; $D9B; ;;C?6C97C?<D>C??Dc                   K   t        j                         }t        j                         4 d {   }|j                  |j	                               }|j                  |j	                               }|j                  |j	                               }t        j
                  d       d {    |j                  d       |j                  d       |j                          | j                  t         j                        5  | d {    d d d        | d {    d d d       d {    | j                  j                         j                         hddh       y 7 07 7 ^# 1 sw Y   ]xY w7 Z7 L# 1 d {  7  sw Y   \xY wwr   )r   r   r   r   r   r   r   ry   rs   r   r   rO   )r!   r$   r&   reader1reader2reader3s         r
   )test_get_cancel_drop_many_pending_readersz7QueuePutTests.test_get_cancel_drop_many_pending_readers  s0    MMO$$& 	 	"nnQUUW-GnnQUUW-GnnQUUW-G--"""LLOLLONN""7#9#9:  MM	 	" 	'..*GNN,<=1vF#	
 #   	 	 	 	s   -FEFA6E6)E"*AE6?E&E$E&
E6E2E6F'E4(8F"E6$E&&E/	+E64F6F<E?=FFc                 p  K   t        j                  d      }|j                  d       t        j                  |j	                  d            }t        j
                  d       d {    |j                         }| j                  |d       |j                          	 | d {    |j                         }| j                  |d       | j                  |j                         d       y 7 7 I# t         j                  $ r2 t        j                  |j	                  d            }| d {  7   Y w xY ww)Nr   r   r   )r   r   r   r   r   r   r   r   ry   r   qsize)r!   r$   writervalue1value2s        r
   test_put_cancel_dropz"QueuePutTests.test_put_cancel_drop'  s     MM!	Q $$QUU1X.mmA#	LL #A& 	 %% 	((q2FLL	sU   A#D6%C*&6D6C. "C,#C. 'AD6,C. .<D3*D-+D30D62D33D6c                     t        j                  d      }|j                  d       | j                  t         j                  |j                  d       y )Nr   r   r   )r   r   r   rs   	QueueFullr7   s     r
   test_nonblocking_put_exceptionz,QueuePutTests.test_nonblocking_put_exception?  s7    MM!&	Q'++Q\\1=r	   c                   K   t        j                  d      }|j                  d       |j                  d       | j                  |j	                                | j                  t         j                  |j                  d       t        j                  d      }|j                  d       d {    |j                  d       d {    | j                  |j	                                y 7 =7 &w)Ng?r   r   r   rC   )r   r   r   r   r?   rs   r   r   r7   s     r
   test_float_maxsizez QueuePutTests.test_float_maxsizeD  s     MM#(	Q	Q!'++Q\\1=MM#(eeAheeAh! 	s$   B-C1/C-0C1C/	%C1/C1c                 D  K   t        j                         fd}t        j                   |             }| j                  dj	                          d {          | j                  |j                                | j                  |j                                y 7 Gw)Nc                  D   K    j                  d       d {    y7 w)Nr   Tr   )r$   s   r
   r   z3QueuePutTests.test_put_cancelled.<locals>.queue_putT  s     %%(NN      r   )r   r   r   r   r   r   r    rO   )r!   r   rP   r$   s      @r
   test_put_cancelledz QueuePutTests.test_put_cancelledQ  sl     MMO	 	,!%%'M*!
# *s   AB B
AB c                 <  K   t        j                  d      }t        j                  |j                  d            }t        j                  |j                  d            }t        j                  |j                  d            }t        j                  d       d {    | j                  |j                                | j                  |j                                |j                          t        j                  d       d {    | j                  |j                                | j                  |j                         d       t        j                  d       d {    | j                  |j                         d       | d {    y 7 7 7 37 w)Nr   r   rx   r~   Xr   )r   r   r   r   r   r   r    r<   ry   r   r   )r!   r$   put_aput_bput_cs        r
   test_put_cancelled_racez%QueuePutTests.test_put_cancelled_race^  s    MM!$##AEE#J/##AEE#J/##AEE#J/mmA

%&mmA

%-mmA- 	
 	 	 	sJ   BFFA*FF	AF$F%)FFFFFFc                 &  K   t        j                         }t        j                  |j                               }t        j                  d       d {    |j                  d       d {    | j                  | d {   d       y 7 87 !7 wrw   )r   r   r   r   r   r   r   )r!   r$   rP   s      r
   test_put_with_waiting_gettersz+QueuePutTests.test_put_with_waiting_gettersr  si     MMO(mmAeeCjq#& 	 s6   ABBB+B,B BBBBc                   K   t        j                  d      fd}fd}t        j                         4 d {   }|j                   |              |j                   |d             |j                   |d             |j                   |d             |j                   |d             d d d       d {    y 7 7 # 1 d {  7  sw Y   y xY ww)Nr   c                 D   K   j                  |        d {    y 7 wr   r   )itemr   s    r
   r(   z:QueuePutTests.test_why_are_putters_waiting.<locals>.putter|  s     ))D/!!r   c                     K   t        j                  d       d {    j                         } t        |       D ]  }j	                           y 7 5w)Nr   )r   r   r   rD   r   )numrG   r   s     r
   r'   z:QueuePutTests.test_why_are_putters_waiting.<locals>.getter  sH     --"""++-C3Z #  "# #s   AA6Ar   r   rC   r   )r!   r(   r'   r&   r   s       @r
   test_why_are_putters_waitingz*QueuePutTests.test_why_are_putters_waitingy  s     a 	"	# $$& 	& 	&"NN68$NN6!9%NN6!9%NN6!9%NN6!9%	& 	& 	& 	& 	& 	& 	&sE   8CCCA3C2C=C>CCCCCCc                   K   t        j                  d      }|j                  d       t        j                  |j	                  d            }t        j
                  d       d {    | j                  t        |j                        d       |j                          | j                  t         j                        5  | d {    d d d        | j                  t        |j                        d       y 7 7 4# 1 sw Y   3xY ww)Nr   r   r   )r   r   r   r   r   r   r   r   r\   ry   rs   r   r!   r   put_tasks      r
   2test_cancelled_puts_not_being_held_in_self_puttersz@QueuePutTests.test_cancelled_puts_not_being_held_in_self_putters  s     a( &&uyy|4mmA 	U^^,a0w556 	NN	U^^,a0 	 	 	s=   A$D&C8'AD?C<C:C<
/D:C<<DDc                   K   t        j                  d      }|j                  d       t        j                  |j	                  d            }t        j
                  d       d {    |j                          |j                          | j                  t         j                        5  | d {    d d d        y 7 W7 # 1 sw Y   y xY ww)Nr   r   )
r   r   r   r   r   r   r   ry   rs   r   r   s      r
   0test_cancelled_put_silence_value_error_exceptionz>QueuePutTests.test_cancelled_put_silence_value_error_exception  s     a  &&uyy|4mmA 	 	
 w556 	NN	 	 	 	 	s=   A#C%B=&AC)C/B?0C4
C?CC
CN)rR   rS   rT   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r
   r   r      sI    +"(,
$,G,'0>
"$('&&1"r	   r   c                       e Zd Zd Zy)LifoQueueTestsc                 
  K   t        j                         }dD ]  }|j                  |       d {     t        d      D cg c]  }|j	                          d {    }}| j                  g d|       y 7 I7 c c}w w)NrB   rC   )r   rC   r   )r   	LifoQueuer   rD   r   r   rE   s        r
   rI   zLifoQueueTests.test_order  sq      	A%%(NN	 ).a11quuw11E* 1rJ   NrR   rS   rT   rI   r   r	   r
   r   r         +r	   r   c                       e Zd Zd Zy)PriorityQueueTestsc                 
  K   t        j                         }dD ]  }|j                  |       d {     t        d      D cg c]  }|j	                          d {    }}| j                  g d|       y 7 I7 c c}w w)NrB   rC   )r   r   rC   )r   PriorityQueuer   rD   r   r   rE   s        r
   rI   zPriorityQueueTests.test_order  sq     !!# 	A%%(NN	 ).a11quuw11E* 1rJ   Nr   r   r	   r
   r   r     r   r	   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)_QueueJoinTestMixinNc                 d    | j                         }| j                  t        |j                         y r   )q_classrs   
ValueError	task_doner7   s     r
   test_task_done_underflowz,_QueueJoinTestMixin.test_task_done_underflow  s!    LLN*akk2r	   c                 L  K   | j                         t        d      D ]  }j                  |        ddfd}t        j                         4 d {   }t        d      D cg c]  }|j                   |              }}j                          d {    | j                  t        t        d                   dt        t        |            D ]  }j                  d        d d d       d {    y 7 c c}w 7 l7 # 1 d {  7  sw Y   y xY ww)Nd   r   Tc                  x   K   r1j                          d {   } | z  j                          r0y y 7 wr   )r   r   )r   accumulatorr$   runnings    r
   workerz2_QueueJoinTestMixin.test_task_done.<locals>.worker  s4      UUW}t# $s   :8::r   F)
r   rD   r   r   r   r   joinr   sumr   )	r!   rF   r   r&   indextasksr   r$   r   s	         @@@r
   test_task_donez"_QueueJoinTestMixin.test_task_done  s	    LLNs 	ALLO	  	 $$& 
	  
	 ""'(, ^^FH- ,E , &&(NNSs_k: G3u:&  Q 
	  
	  
	 , 	
	  
	  
	  
	 sg   AD$DD$D,D	DDAD3D$>D?D$DD$D!DD!D$c                    K   | j                         }|j                          d {    |j                          d {    y 7 7 wr   )r   r   r7   s     r
   test_join_empty_queuez)_QueueJoinTestMixin.test_join_empty_queue  s6     LLN
 ffhffh 	s   $AAAAAAc                    K   | j                         }| j                  |j                         d       d|_        | j                  |j                         d       y w)Nz	maxsize=0r   zmaxsize=0 tasks=2)r   r   _format_unfinished_tasksr7   s     r
   test_formatz_QueueJoinTestMixin.test_format  sF     LLNk2&9:s   AA)rR   rS   rT   r   r   r   r   r   r   r	   r
   r   r     s    G3 >;r	   r   c                   $    e Zd Zej                  Zy)QueueJoinTestsN)rR   rS   rT   r   r   r   r   r	   r
   r   r     s    mmGr	   r   c                   $    e Zd Zej                  Zy)LifoQueueJoinTestsN)rR   rS   rT   r   r   r   r   r	   r
   r   r     s    Gr	   r   c                   $    e Zd Zej                  Zy)PriorityQueueJoinTestsN)rR   rS   rT   r   r   r   r   r	   r
   r   r   	  s    ##Gr	   r   __main__)__doc__r   unittesttypesr   r   IsolatedAsyncioTestCaser   rV   r   r   r   r   r   r   r   rR   mainr   r	   r
   <module>r      s       (i$h66 i$X^1H44 ^1BWH44 Wt+X55 ++99 +5; 5;p((*J*J  ,h.N.N  $0(2R2R $ zHMMO r	   