a
    	3j%U                     @   s   d dl Z d dl mZ d dlZd dlmZ dd ZG dd dejZG dd	 d	eZ	G d
d deZ
G dd deZG dd deZG dd deZG dd dZG dd deeZG dd deeZG dd deeZedkre   dS )    N)mock)utilsc                   C   s   t d  d S N)asyncioZset_event_loop_policy r   r   Y/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_asyncio/test_queues.pytearDownModule
   s    r   c                       s   e Zd Z fddZ  ZS )_QueueTestBasec                    s   t    |  | _d S r   )supersetUpnew_test_looploopself	__class__r   r   r      s    
z_QueueTestBase.setUp)__name__
__module____qualname__r   __classcell__r   r   r   r   r	      s   r	   c                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )QueueBasicTestsc                    s@  fdd} |t tjd}W d    n1 sB0    Y   |d | tt| |v }	||  fdd}t 
|  W d    n1 s0    Y   fdd}t( 
|  tjd}W d    n1 s0    Y  |d	 d
 |v  d S )Nc                  3   s.   d V }   d|  dV }   d|  dV  d S N皙?g?assertAlmostEqualZwhenr   r   r   gen   s
    z.QueueBasicTests._test_repr_or_str.<locals>.genr   z<Queuec                     sJ   t jd} |   t dI d H  d | v  | d d S )Nr   r   z_getters[1]r   )r   Queuecreate_taskgetsleep
assertTrue
put_nowaitqfnr   r   r   r   
add_getter,   s
    z5QueueBasicTests._test_repr_or_str.<locals>.add_getterc                     sV   t jdd} | d | d t dI d H  d | v  |   d S )N   maxsizer      r   z_putters[1])r   r   r#   r   putr!   r"   
get_nowaitr$   r&   r   r   
add_putter9   s    
z5QueueBasicTests._test_repr_or_str.<locals>.add_putterr)   z
_queue=[1])r   assertWarnsDeprecationWarningr   r   r"   
startswithhexidassertEqualrun_until_completer#   )r   r'   Z	expect_idr   r%   Zid_is_presentr(   r/   r   r&   r   _test_repr_or_str   s     
*
*,
z!QueueBasicTests._test_repr_or_strc                 C   s   t  }| t tj|d}W d    n1 s40    Y  | |j| | t tj| jd}W d    n1 sz0    Y  | |j| j d S Nr   )	r   ZMockr0   r1   r   r   assertIs_loopr   )r   r   r%   r   r   r   test_ctor_loopJ   s    *,zQueueBasicTests.test_ctor_loopc                 C   s(   t | j t  }| |j| j d S r   )r   Zset_event_loopr   r   r9   r:   r   r%   r   r   r   test_ctor_noloopT   s    z QueueBasicTests.test_ctor_noloopc                 C   s   |  td d S NT)r7   reprr   r   r   r   	test_reprY   s    zQueueBasicTests.test_reprc                 C   s   |  td d S )NF)r7   strr   r   r   r   test_str\   s    zQueueBasicTests.test_strc                 C   s   |  t tj| jd}W d    n1 s.0    Y  | |  |d | |  | 	d|
  | |  d S Nr   r)   )r0   r1   r   r   r   r"   emptyr#   assertFalser5   r.   r<   r   r   r   
test_empty_   s    ,
zQueueBasicTests.test_emptyc                 C   s   |  t tj| jd}W d    n1 s.0    Y  | |  |  t  tjd| jd}W d    n1 sv0    Y  |d | |  d S )Nr   r)   r*   )	r0   r1   r   r   r   rE   fullr#   r"   r<   r   r   r   	test_fullh   s    ,.
zQueueBasicTests.test_fullc                    sv   |  t tj| jd W d    n1 s.0    Y  dD ]} | q< fddtdD }| g d| d S )Nr   r)      r,   c                    s   g | ]}   qS r   r.   .0_r$   r   r   
<listcomp>x       z.QueueBasicTests.test_order.<locals>.<listcomp>rJ   )r0   r1   r   r   r   r#   ranger5   r   iitemsr   r$   r   
test_orderr   s    ,zQueueBasicTests.test_orderc                    s   fdd} |t tjddW d    n1 sD0    Y  dj g   fdd fdd}|  d		  d S )
Nc                  3   s.   d V }   d|  dV }   d|  dV  d S )N{Gz?{Gz?r   r   r   r   r   r   }   s
    z)QueueBasicTests.test_maxsize.<locals>.genr,   r*   c                     s,   t dD ]} | I d H   |  qdS )NrJ   T)rQ   r-   append)rS   )have_been_putr%   r   r   putter   s    z,QueueBasicTests.test_maxsize.<locals>.putterc                     s     } tdI d H  ddg  d  tdI d H  g d  d  d  |   |   d S )NrV   r   r)   )r   r)   r,   r,   )r   r   r!   r5   r.   r"   doneresult)trY   r   rZ   r%   r   r   r   test   s    z*QueueBasicTests.test_maxsize.<locals>.testrW   )
r   r0   r1   r   r   r5   r+   r6   r   timer   r   r_   r   r^   r   test_maxsize{   s    
,zQueueBasicTests.test_maxsizeN)r   r   r   r7   r;   r=   r@   rB   rF   rH   rU   rb   r   r   r   r   r      s   3
	
	r   c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )QueueGetTestsc                    sl   |  t tj| jd W d    n1 s.0    Y   d  fdd}| j| }| d| d S )Nr   r)   c                      s      I d H S r   r    r   r$   r   r   	queue_get   s    z2QueueGetTests.test_blocking_get.<locals>.queue_get)r0   r1   r   r   r   r#   r6   r5   )r   re   resr   r$   r   test_blocking_get   s    ,
zQueueGetTests.test_blocking_getc                 C   s   |  t  tjd| jd}W d    n1 s00    Y  |d | j }|j| | j	|
 }| d| | |  | |  d S )Nr)   r   )r0   r1   r   r   r   r#   Zcreate_future_puttersrX   r6   r    r5   r"   r[   ZassertIsNoner\   )r   r%   waiterrf   r   r   r   test_get_with_putters   s    .

z#QueueGetTests.test_get_with_puttersc                    s   fdd} |t( tjdtjdW d    n1 sN0    Y  d  fdd fdd}| }d	| d
	  d S )Nc                  3   s   d V }   d|  dV  d S NrV   r   r   r   r   r   r      s    z1QueueGetTests.test_blocking_get_wait.<locals>.genr   Fc                     s       I d H } d | S r>   )setr    )rf   finishedr%   startedr   r   re      s    z7QueueGetTests.test_blocking_get_wait.<locals>.queue_getc                     sL    djd  }  I d H    | I d H }  |S NrV   r)   )
call_laterr#   r   waitrE   r"   )Zqueue_get_taskrf   rn   r   r%   re   r   ro   r   r   	queue_put   s    


z7QueueGetTests.test_blocking_get_wait.<locals>.queue_putr)   rV   )
r   r0   r1   r   r   Eventr6   r5   r   r`   )r   r   rt   rf   r   rs   r   test_blocking_get_wait   s    
*	z$QueueGetTests.test_blocking_get_waitc                 C   sV   |  t tj| jd}W d    n1 s.0    Y  |d | d|  d S rC   r0   r1   r   r   r   r#   r5   r.   r<   r   r   r   test_nonblocking_get   s    ,
z"QueueGetTests.test_nonblocking_getc                 C   sL   |  t tj| jd}W d    n1 s.0    Y  | tj|j d S r8   )r0   r1   r   r   r   assertRaisesZ
QueueEmptyr.   r<   r   r   r   test_nonblocking_get_exception   s    ,z,QueueGetTests.test_nonblocking_get_exceptionc                    s   fdd} | t tj dW d    n1 sB0    Y  fdd fdd}d |  d	   d S )
Nc                  3   s.   d V }   d|  dV }   d|  dV  d S )NrV   gZd;?g?r   r   r   r   r   r      s
    z-QueueGetTests.test_get_cancelled.<locals>.genr   c                      s   t   dI d H S )Ng&1?)r   wait_forr    r   r$   r   r   re      s    z3QueueGetTests.test_get_cancelled.<locals>.queue_getc                     s0      } tdI d H  d | I d H S rp   )r   r   r!   r#   )Zget_task)r   r%   re   r   r   r_      s    
z.QueueGetTests.test_get_cancelled.<locals>.testr)   gQ?)	r   r0   r1   r   r   r5   r6   r   r`   ra   r   )r   r%   re   r   r   test_get_cancelled   s    
*z QueueGetTests.test_get_cancelledc                 C   s   |  t tj| jd}W d    n1 s.0    Y  | j| }| j| }t| j |	  t| j | 
|  |d t| j | | d d S Nr   a)r0   r1   r   r   r   r   r    
test_utilsrun_brieflycancelr"   r[   r#   r5   r\   )r   r%   t1t2r   r   r   test_get_cancelled_race  s    ,
z%QueueGetTests.test_get_cancelled_racec                 C   s   |  t  tj| jdd}W d    n1 s00    Y  | j|d | j|d t| j | 	| j
| d | 	| j
| d d S )Nr)   r   r+   r~   b)r0   r1   r   r   r   r   r-   r   r   r5   r6   r    r<   r   r   r   test_get_with_waiting_putters  s    .z+QueueGetTests.test_get_with_waiting_puttersc                 C   s   dd }dd }d}d}|  t  tj|| jd}W d    n1 sH0    Y  |  t6 | jtj||||||| jd W d    n1 s0    Y  d S )Nc                    s    t |D ]}|  I d H  qd S r   )rQ   r    )queueZnum_expectedrN   r   r   r   consumer"  s    z<QueueGetTests.test_why_are_getters_waiting.<locals>.consumerc                    s"   t |D ]}| |I d H  qd S r   )rQ   r-   )r   Z	num_itemsrS   r   r   r   producer&  s    z<QueueGetTests.test_why_are_getters_waiting.<locals>.producerr)      r   r0   r1   r   r   r   r6   Zgather)r   r   r   
queue_sizeZproducer_num_itemsr%   r   r   r   test_why_are_getters_waiting  s    .z*QueueGetTests.test_why_are_getters_waitingc                 C   s   dd }|  || _dd }| t  tj| jdd}W d    n1 sL0    Y  | j| j|| | t	|j
d d S )Nc                   s   s   dV  dV  d S r   r   r   r   r   r   a_generator8  s    zXQueueGetTests.test_cancelled_getters_not_being_held_in_self_getters.<locals>.a_generatorc                    s4   zt |  dI d H }W n t jy.   Y n0 d S )Nr   )r   r{   r    TimeoutError)r   itemr   r   r   r   >  s    zUQueueGetTests.test_cancelled_getters_not_being_held_in_self_getters.<locals>.consumerr   r   r   )r   r   r0   r1   r   r   r6   r   r5   lenZ_getters)r   r   r   r   r   r   r   5test_cancelled_getters_not_being_held_in_self_getters7  s    .zCQueueGetTests.test_cancelled_getters_not_being_held_in_self_gettersN)r   r   r   rg   rj   rv   rx   rz   r|   r   r   r   r   r   r   r   r   rc      s   "	rc   c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )QueuePutTestsc                    sV   |  t tj| jd W d    n1 s.0    Y   fdd}| j|  d S )Nr   c                      s     dI d H  d S )Nr)   r-   r   r$   r   r   rt   P  s    z2QueuePutTests.test_blocking_put.<locals>.queue_put)r0   r1   r   r   r   r6   r   rt   r   r$   r   test_blocking_putL  s    ,zQueuePutTests.test_blocking_putc                    s   fdd} |t* tjddtjdW d    n1 sP0    Y  d  fdd fd	d
}|  d  d S )Nc                  3   s   d V }   d|  dV  d S rk   r   r   r   r   r   r   X  s    z1QueuePutTests.test_blocking_put_wait.<locals>.genr)   r*   r   Fc                      s0      dI d H  dI d H  d d S )Nr)   r,   T)rl   r-   r   rm   r   r   rt   d  s    z7QueuePutTests.test_blocking_put_wait.<locals>.queue_putc                     sJ    dj  }  I d H    | I d H    d S rk   )rq   r.   r   rr   rE   r"   )Zqueue_put_taskrn   r   r%   rt   r   ro   r   r   re   k  s    

z7QueuePutTests.test_blocking_put_wait.<locals>.queue_getrV   )	r   r0   r1   r   r   ru   r6   r   r`   )r   r   re   r   r   r   test_blocking_put_waitV  s    
*z$QueuePutTests.test_blocking_put_waitc                 C   sV   |  t tj| jd}W d    n1 s.0    Y  |d | d|  d S rC   rw   r<   r   r   r   test_nonblocking_putv  s    ,
z"QueuePutTests.test_nonblocking_putc                 C   s   dd }|  |}| t tj|d}W d    n1 s>0    Y  || }|td |	d |	d |
  z|| W n, tjy   || }|| Y n0 | }| d| d S )Nc                   s   s   dV  dV  d S NrV   r   r   r   r   r   r   r   }  s    zBQueuePutTests.test_get_cancel_drop_one_pending_reader.<locals>.genr   rV   r)   r,   )r   r0   r1   r   r   r   r    r6   r!   r#   r   CancelledErrorr\   r5   )r   r   r   r%   readerr\   r   r   r   'test_get_cancel_drop_one_pending_reader|  s     
*

z5QueuePutTests.test_get_cancel_drop_one_pending_readerc                 C   s   dd }|  |}|d | t tj|d}W d    n1 sH0    Y  || }|| }|| }|t	d |
d |
d |  z|| W n tjy   Y n0 || | | | hddh d S )Nc                   s   s   dV  dV  d S r   r   r   r   r   r   r     s    zDQueuePutTests.test_get_cancel_drop_many_pending_readers.<locals>.genTr   rV   r)   r,   )r   Z	set_debugr0   r1   r   r   r   r    r6   r!   r#   r   r   r5   r\   )r   r   r   r%   Zreader1Zreader2Zreader3r   r   r   )test_get_cancel_drop_many_pending_readers  s$    

*


z7QueuePutTests.test_get_cancel_drop_many_pending_readersc                 C   s   dd }|  |}| t tjd|d}W d    n1 s@0    Y  |d ||d}|t	d |
 }| |d |  z|| W n. tjy   ||d}|| Y n0 |
 }| |d | | d d S )Nc                   s   s   dV  dV  d S r   r   r   r   r   r   r     s    z/QueuePutTests.test_put_cancel_drop.<locals>.genr)   r   r,   rV   r   )r   r0   r1   r   r   r#   r   r-   r6   r!   r.   r5   r   r   qsize)r   r   r   r%   writerZvalue1Zvalue2r   r   r   test_put_cancel_drop  s$    
,
z"QueuePutTests.test_put_cancel_dropc                 C   sZ   |  t  tjd| jd}W d    n1 s00    Y  |d | tj|jd d S )Nr)   r*   r,   )r0   r1   r   r   r   r#   ry   	QueueFullr<   r   r   r   test_nonblocking_put_exception  s    .
z,QueuePutTests.test_nonblocking_put_exceptionc                    s    t  tjdjd W d    n1 s00    Y   d  d    tj	 jd  t  tjdjd W d    n1 s0    Y   fdd}j
|  d S )Ng?r*   r)   r,   rJ   c                      s2     dI d H    dI d H     d S )Nr)   r,   )r-   r"   rG   r   r%   r   r   r   rt     s    z3QueuePutTests.test_float_maxsize.<locals>.queue_put)r0   r1   r   r   r   r#   r"   rG   ry   r   r6   r   r   r   r   test_float_maxsize  s    .

.z QueuePutTests.test_float_maxsizec                    s   |  t tj| jd W d    n1 s.0    Y   fdd} fdd}| j| }| d| j|  | |	  | |
  d S )Nr   c                      s     dI d H  dS )Nr)   Tr   r   r$   r   r   rt     s    z3QueuePutTests.test_put_cancelled.<locals>.queue_putc                      s      I d H S r   rd   r   r$   r   r   r_     s    z.QueuePutTests.test_put_cancelled.<locals>.testr)   )r0   r1   r   r   r   r   r5   r6   r"   r[   r\   )r   rt   r_   r]   r   r$   r   test_put_cancelled  s    ,z QueuePutTests.test_put_cancelledc                 C   s   |  t  tj| jdd}W d    n1 s00    Y  | j|d}| j|d}| j|d}t| j | 	|
  | |
  |  t| j | 	|
  | | d t| j | | d | j| d S )Nr)   r   r~   r   X)r0   r1   r   r   r   r   r-   r   r   r"   r[   rE   r   r5   r.   r6   )r   r%   Zput_aZput_bZput_cr   r   r   test_put_cancelled_race  s    .z%QueuePutTests.test_put_cancelled_racec                 C   s~   |  t tj| jd}W d    n1 s.0    Y  | j| }t| j | j	|
d | | j	|d d S r}   )r0   r1   r   r   r   r   r    r   r   r6   r-   r5   )r   r%   r]   r   r   r   test_put_with_waiting_getters  s    ,z+QueuePutTests.test_put_with_waiting_gettersc                    s   |  t  tjd| jd W d    n1 s00    Y   fdd} fdd}|d}|d}|d}|d	}|  t2 | jtj| ||||| jd W d    n1 s0    Y  d S )
Nr,   r   c                    s     | I d H  d S r   r   r   r   r   r   rZ   "  s    z:QueuePutTests.test_why_are_putters_waiting.<locals>.putterc                     s2   t dI d H    } t| D ]}  }q d S )Nr   )r   r!   r   rQ   r.   )numrN   r   r   r   r   getter%  s    z:QueuePutTests.test_why_are_putters_waiting.<locals>.getterr   r)   rJ   r   )r   rZ   r   t0r   r   Zt3r   r   r   test_why_are_putters_waiting  s    .z*QueuePutTests.test_why_are_putters_waitingc                 C   s   dd }|  |}| t tj|dd}W d    n1 s@0    Y  |d ||d}|t	d | 
t|jd |  | tj || W d    n1 s0    Y  | 
t|jd d S )Nc                   s   s   dV  dV  d S r   r   r   r   r   r   r   4  s    zUQueuePutTests.test_cancelled_puts_not_being_held_in_self_putters.<locals>.a_generatorr)   r   rV   r   )r   r0   r1   r   r   r#   r   r-   r6   r!   r5   r   rh   r   ry   r   )r   r   r   r   put_taskr   r   r   2test_cancelled_puts_not_being_held_in_self_putters3  s    
,
(z@QueuePutTests.test_cancelled_puts_not_being_held_in_self_puttersc                 C   s   dd }|  |}| t tjd|d}W d    n1 s@0    Y  |d ||d}|t	d |
  |  | tj || W d    n1 s0    Y  d S )Nc                   s   s   dV  dV  d S r   r   r   r   r   r   r   L  s    zKQueuePutTests.test_cancelled_put_silence_value_error_exception.<locals>.genr)   r   rV   )r   r0   r1   r   r   r#   r   r-   r6   r!   r.   r   ry   r   )r   r   r   r   r   r   r   r   0test_cancelled_put_silence_value_error_exceptionK  s    
,
z>QueuePutTests.test_cancelled_put_silence_value_error_exceptionN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   J  s   
  r   c                   @   s   e Zd Zdd ZdS )LifoQueueTestsc                    sv   |  t tj| jd W d    n1 s.0    Y  dD ]} | q< fddtdD }| g d| d S )Nr   rI   c                    s   g | ]}   qS r   rK   rL   r$   r   r   rO   p  rP   z-LifoQueueTests.test_order.<locals>.<listcomp>rJ   )r,   rJ   r)   )r0   r1   r   	LifoQueuer   r#   rQ   r5   rR   r   r$   r   rU   j  s    ,zLifoQueueTests.test_orderNr   r   r   rU   r   r   r   r   r   h  s   r   c                   @   s   e Zd Zdd ZdS )PriorityQueueTestsc                    sv   |  t tj| jd W d    n1 s.0    Y  dD ]} | q< fddtdD }| g d| d S )Nr   rI   c                    s   g | ]}   qS r   rK   rL   r$   r   r   rO   |  rP   z1PriorityQueueTests.test_order.<locals>.<listcomp>rJ   )r)   r,   rJ   )r0   r1   r   PriorityQueuer   r#   rQ   r5   rR   r   r$   r   rU   v  s    ,zPriorityQueueTests.test_orderNr   r   r   r   r   r   t  s   r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 ZdS )
_QueueJoinTestMixinNc                 C   sJ   |  t | j| jd}W d    n1 s.0    Y  | t|j d S r8   )r0   r1   q_classr   ry   
ValueError	task_doner<   r   r   r   test_task_done_underflow  s    ,z,_QueueJoinTestMixin.test_task_done_underflowc                    s    t jjdW d    n1 s.0    Y  tdD ]}| q@d d fddfdd}j| }ttd  d	tt	|D ]}d qjt
| d S )
Nr   d   r   Tc                     s(   r$  I d H }  | 7    q d S r   )r    r   r   )accumulatorr%   runningr   r   worker  s    z2_QueueJoinTestMixin.test_task_done.<locals>.workerc                     s*   fddt dD }   I d H  | S )Nc                    s   g | ]} j  qS r   )r   r   )rM   index)r   r   r   r   rO     s   zD_QueueJoinTestMixin.test_task_done.<locals>.test.<locals>.<listcomp>r,   )rQ   join)tasks)r%   r   r   r   r   r_     s
    z0_QueueJoinTestMixin.test_task_done.<locals>.testF)r0   r1   r   r   rQ   r#   r6   r5   sumr   r   rr   )r   rS   r_   r   r   )r   r%   r   r   r   r   test_task_done  s    ,z"_QueueJoinTestMixin.test_task_donec                    sV   |  t | j| jd W d    n1 s.0    Y   fdd}| j|  d S )Nr   c                      s       I d H     I d H  d S r   )r   r   r$   r   r   r     s    z7_QueueJoinTestMixin.test_join_empty_queue.<locals>.join)r0   r1   r   r   r6   )r   r   r   r$   r   test_join_empty_queue  s    ,z)_QueueJoinTestMixin.test_join_empty_queuec                 C   sb   |  t | j| jd}W d    n1 s.0    Y  | | d d|_| | d d S )Nr   z	maxsize=0r,   zmaxsize=0 tasks=2)r0   r1   r   r   r5   _format_unfinished_tasksr<   r   r   r   test_format  s
    ,z_QueueJoinTestMixin.test_format)r   r   r   r   r   r   r   r   r   r   r   r   r     s
   $r   c                   @   s   e Zd ZejZdS )QueueJoinTestsN)r   r   r   r   r   r   r   r   r   r   r     s   r   c                   @   s   e Zd ZejZdS )LifoQueueJoinTestsN)r   r   r   r   r   r   r   r   r   r   r     s   r   c                   @   s   e Zd ZejZdS )PriorityQueueJoinTestsN)r   r   r   r   r   r   r   r   r   r   r     s   r   __main__)Zunittestr   r   Ztest.test_asyncior   r   r   ZTestCaser	   r   rc   r   r   r   r   r   r   r   r   mainr   r   r   r   <module>   s(     %   C