o
    JXhiJ                     @   s   	 d dl Z d dlZd dlm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rve   dS dS )    N)GenericAlias)utilsc                   C   s   t d  d S N)asyncioZset_event_loop_policy r   r   G/opt/python-3.10.19/usr/lib/python3.10/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                   @   sL   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S )QueueBasicTestsc                    s   	 fdd} |t } |d | tt| |v }||  fdd}|   fdd}|  t }|	d d	 |v  d S )
Nc                  3   0    d V }   d|  dV }   d|  dV  d S N皙?g?assertAlmostEqualZwhenr   r   r   gen      
z.QueueBasicTests._test_repr_or_str.<locals>.genz<Queuec                     sH   t  } |   t dI d H  d | v  | d d S )Nr   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   maxsize   r   z_putters[1])r   r   r$   r    putr"   r#   
get_nowaitr%   r'   r   r   
add_putter6   s   
z5QueueBasicTests._test_repr_or_str.<locals>.add_putterr*   z
_queue=[1])
r   r   r   r#   
startswithhexidassertEqualrun_until_completer$   )r   r(   Z	expect_idr   r&   Zid_is_presentr)   r0   r   r'   r   _test_repr_or_str   s   


z!QueueBasicTests._test_repr_or_strc                 C      |  td d S NT)r6   reprr   r   r   r   	test_reprF      zQueueBasicTests.test_reprc                 C   r7   )NF)r6   strr   r   r   r   test_strI   r;   zQueueBasicTests.test_strc                 C   s*   t jt }| |jtf | |t d S r   )r   r   intr4   __args__ZassertIsInstancer   r   r&   r   r   r   test_generic_aliasL   s   
z"QueueBasicTests.test_generic_aliasc                 C   sP   t  }| |  |d | |  | d|  | |  d S Nr*   )r   r   r#   emptyr$   assertFalser4   r/   r@   r   r   r   
test_emptyQ   s   
zQueueBasicTests.test_emptyc                 C   s>   t  }| |  t jdd}|d | |  d S )Nr*   r+   )r   r   rD   fullr$   r#   r@   r   r   r   	test_fullY   s
   
zQueueBasicTests.test_fullc                    sF   t   dD ]} | q fddtdD }| g d| d S )Nr*      r-   c                       g | ]}   qS r   r/   .0_r%   r   r   
<listcomp>f       z.QueueBasicTests.test_order.<locals>.<listcomp>rI   )r   r   r$   ranger4   r   iitemsr   r%   r   
test_ordera   
   zQueueBasicTests.test_orderc                    sv   fdd} |tjdddj g   fdd fdd}|  d	  d S )
Nc                  3   r   )N{Gz?{Gz?r   r   r   r   r   r   k   r   z)QueueBasicTests.test_maxsize.<locals>.genr-   r+   c                     s.   t dD ]} | I d H   |  qdS )NrI   T)rQ   r.   append)rS   )have_been_putr&   r   r   putterx   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 )NrW   r   r*   )r   r*   r-   r-   )r    r   r"   r4   r/   r#   doneresult)trZ   r   r[   r&   r   r   r   test~   s   z*QueueBasicTests.test_maxsize.<locals>.testrX   )r   r   r   r4   r,   r5   r   timer   r   r`   r   r_   r   test_maxsizei   s   
zQueueBasicTests.test_maxsizeN)r   r   r   r6   r:   r=   rA   rE   rG   rU   rc   r   r   r   r   r      s    0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                    s<   t    d  fdd}| j| }| d| d S )Nr*   c                            I d H S r   r!   r   r%   r   r   	queue_get      z2QueueGetTests.test_blocking_get.<locals>.queue_get)r   r   r$   r   r5   r4   )r   rg   resr   r%   r   test_blocking_get   s
   
zQueueGetTests.test_blocking_getc                 C   sf   t d}|d | j }|j| | j| }| 	d| | 
|  | |  d S rB   )r   r   r$   r   Zcreate_future_puttersrY   r5   r!   r4   r#   r\   ZassertIsNoner]   )r   r&   waiterri   r   r   r   test_get_with_putters   s   


z#QueueGetTests.test_get_with_puttersc                    s|   fdd} |t t d  fdd fdd}| }d| d	  d S )
Nc                  3       d V }   d|  dV  d S NrW   r   r   r   r   r   r         
z1QueueGetTests.test_blocking_get_wait.<locals>.genFc                     s        I d H } d | S r8   )setr!   )ri   finishedr&   startedr   r   rg      s
   z7QueueGetTests.test_blocking_get_wait.<locals>.queue_getc                     sN    djd  }  I d H    | I d H }  |S NrW   r*   )
call_laterr$   r    waitrD   r#   )Zqueue_get_taskri   rs   r   r&   rg   r   rt   r   r   	queue_put   s   


z7QueueGetTests.test_blocking_get_wait.<locals>.queue_putr*   rW   )r   r   r   Eventr5   r4   r   ra   )r   r   ry   ri   r   rx   r   test_blocking_get_wait   s   
	z$QueueGetTests.test_blocking_get_waitc                 C   &   t  }|d | d|  d S rB   r   r   r$   r4   r/   r@   r   r   r   test_nonblocking_get      
z"QueueGetTests.test_nonblocking_getc                 C   s   t  }| t j|j d S r   )r   r   assertRaisesZ
QueueEmptyr/   r@   r   r   r   test_nonblocking_get_exception   s   z,QueueGetTests.test_nonblocking_get_exceptionc                    sb   fdd} | t fdd fdd}d |  d   d S )	Nc                  3   s0    d V }   d|  dV }   d|  dV  d S )NrW   gZd;?g?r   r   r   r   r   r      r   z-QueueGetTests.test_get_cancelled.<locals>.genc                      s   t   dI d H S )Ng&1?)r   wait_forr!   r   r%   r   r   rg      s   z3QueueGetTests.test_get_cancelled.<locals>.queue_getc                     s2      } tdI d H  d | I d H S ru   )r    r   r"   r$   )Zget_task)r   r&   rg   r   r   r`      s
   

z.QueueGetTests.test_get_cancelled.<locals>.testr*   gQ?)r   r   r   r4   r5   r   ra   rb   r   )r   r&   rg   r   r   test_get_cancelled   s   
z QueueGetTests.test_get_cancelledc                 C   s   t  }| j| }| j| }t| j |  t| j | |	  |
d t| j | | d d S Na)r   r   r   r    r!   
test_utilsrun_brieflycancelr#   r\   r$   r4   r]   )r   r&   t1t2r   r   r   test_get_cancelled_race   s   
z%QueueGetTests.test_get_cancelled_racec                 C   sp   t jdd}| j|d | j|d t| j | | j|	 d | | j|	 d d S )Nr*   r+   r   b)
r   r   r   r    r.   r   r   r4   r5   r!   r@   r   r   r   test_get_with_waiting_putters   s   z+QueueGetTests.test_get_with_waiting_puttersc                    sT   t | j dd  dd ddfdd fd	d
}| j|  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*      c                     s   t  } |   | S r   r   r   Z	_get_loopr   )
queue_sizer   r   create_queue     
z@QueueGetTests.test_why_are_getters_waiting.<locals>.create_queuec                     s0    I d H } t |  | I d H  d S r   r   Zgatherr%   )r   r   r   producer_num_itemsr   r   r`     s
   z8QueueGetTests.test_why_are_getters_waiting.<locals>.testr   Zset_event_loopr   r5   )r   r`   r   )r   r   r   r   r   r   test_why_are_getters_waiting  s   z*QueueGetTests.test_why_are_getters_waitingc                 C   sV   dd }|  || _dd }tjdd}| j| j|| | t|jd d S )Nc                   s       dV  dV  d S r   r   r   r   r   r   a_generator      
zXQueueGetTests.test_cancelled_getters_not_being_held_in_self_getters.<locals>.a_generatorc                    s6   zt |  dI d H }W d S  t jy   Y d S w )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   r   r   r5   r    r4   lenZ_getters)r   r   r   r   r   r   r   5test_cancelled_getters_not_being_held_in_self_getters  s   zCQueueGetTests.test_cancelled_getters_not_being_held_in_self_gettersN)r   r   r   rj   rm   r{   r~   r   r   r   r   r   r   r   r   r   r   rd      s    
!rd   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                    s&   t    fdd}| j|  d S )Nc                      s     dI d H  d S rB   r.   r   r%   r   r   ry   6  s   z2QueuePutTests.test_blocking_put.<locals>.queue_put)r   r   r   r5   r   ry   r   r%   r   test_blocking_put3  s   zQueuePutTests.test_blocking_putc                    st   fdd} |tjddt d  fdd fdd	}|  d
  d S )Nc                  3   rn   ro   r   r   r   r   r   r   >  rp   z1QueuePutTests.test_blocking_put_wait.<locals>.genr*   r+   Fc                      s2      dI d H  dI d H  d d S )Nr*   r-   T)rq   r.   r   rr   r   r   ry   I  s
   z7QueuePutTests.test_blocking_put_wait.<locals>.queue_putc                     sL    dj  }  I d H    | I d H    d S ro   )rv   r/   r    rw   rD   r#   )Zqueue_put_taskrs   r   r&   ry   r   rt   r   r   rg   P  s   

z7QueuePutTests.test_blocking_put_wait.<locals>.queue_getrW   )r   r   r   rz   r5   r   ra   )r   r   rg   r   r   r   test_blocking_put_wait<  s   
z$QueuePutTests.test_blocking_put_waitc                 C   r|   rB   r}   r@   r   r   r   test_nonblocking_put[  r   z"QueuePutTests.test_nonblocking_putc                 C   s   dd }|  |}t }|| }|td |d |d |  z|| W n tj	yG   || }|| Y nw |
 }| d| d S )Nc                   s   r   NrW   r   r   r   r   r   r   r   a  r   zBQueuePutTests.test_get_cancel_drop_one_pending_reader.<locals>.genrW   r*   r-   )r   r   r   r    r!   r5   r"   r$   r   CancelledErrorr]   r4   )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d |d |d |	  z|| W n
 tj
yN   Y nw || | | | hddh d S )Nc                   s   r   r   r   r   r   r   r   r   }  r   zDQueuePutTests.test_get_cancel_drop_many_pending_readers.<locals>.genTrW   r*   r-   )r   Z	set_debugr   r   r    r!   r5   r"   r$   r   r   r4   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d}|d ||d}|td | }| 	|d |
  z|| W n tjyO   ||d}|| Y nw | }| 	|d | 	| d d S )Nc                   s   r   r   r   r   r   r   r   r     r   z/QueuePutTests.test_put_cancel_drop.<locals>.genr*   r-   rW   r   )r   r   r   r$   r    r.   r5   r"   r/   r4   r   r   qsize)r   r   r   r&   writerZvalue1Zvalue2r   r   r   test_put_cancel_drop  s$   


z"QueuePutTests.test_put_cancel_dropc                 C   s,   t jdd}|d | t j|jd d S )Nr*   r+   r-   )r   r   r$   r   	QueueFullr@   r   r   r   test_nonblocking_put_exception  s   
z,QueuePutTests.test_nonblocking_put_exceptionc                    sl   t jdd  d  d    t j jd t jdd  fdd}j|  d S )Ng?r+   r*   r-   rI   c                      s4     dI d H    dI d H     d S )Nr*   r-   )r.   r#   rF   r   r&   r   r   r   ry     s   z3QueuePutTests.test_float_maxsize.<locals>.queue_put)	r   r   r$   r#   rF   r   r   r   r5   r   r   r   r   test_float_maxsize  s   

z QueuePutTests.test_float_maxsizec                    sd   t    fdd} fdd}| j| }| d| j|  | |  | |  d S )Nc                      s     dI d H  dS )Nr*   Tr   r   r%   r   r   ry     s   z3QueuePutTests.test_put_cancelled.<locals>.queue_putc                      re   r   rf   r   r%   r   r   r`     rh   z.QueuePutTests.test_put_cancelled.<locals>.testr*   )	r   r   r   r    r4   r5   r#   r\   r]   )r   ry   r`   r^   r   r%   r   test_put_cancelled  s   z QueuePutTests.test_put_cancelledc                 C   s   t jdd}| j|d}| j|d}| j|d}t| j | |  | 	|  |
  t| j | |  | | d t| j | | d | j| d S )Nr*   r+   r   r   X)r   r   r   r    r.   r   r   r#   r\   rD   r   r4   r/   r5   )r   r&   Zput_aZput_bZput_cr   r   r   test_put_cancelled_race  s   z%QueuePutTests.test_put_cancelled_racec                 C   sN   t  }| j| }t| j | j|d | 	| j|d d S r   )
r   r   r   r    r!   r   r   r5   r.   r4   )r   r&   r^   r   r   r   test_put_with_waiting_getters  s
   z+QueuePutTests.test_put_with_waiting_gettersc                    sZ   t | j dd }| j| fddfdd  fdd}| j|  d S )	Nc                     s   t d} |   | S )Nr-   r   r%   r   r   r   r     r   z@QueuePutTests.test_why_are_putters_waiting.<locals>.create_queuec                    s     | I d H  d S r   r   r   r   r   r   r[     s   z:QueuePutTests.test_why_are_putters_waiting.<locals>.putterc                     s4   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>.getterc                     s@   d} d}d}d}t   | |||I d H  d S )Nr   r*   r-   rI   r   )t0r   r   Zt3)r   r[   r   r   r`     s   z8QueuePutTests.test_why_are_putters_waiting.<locals>.testr   )r   r   r`   r   )r   r[   r   r   test_why_are_putters_waiting  s   z*QueuePutTests.test_why_are_putters_waitingc                 C   s   dd }|  |}tjdd}|d ||d}|td | t	|j
d |  | tj || W d    n1 sGw   Y  | t	|j
d d S )Nc                   s   r   r   r   r   r   r   r   r     r   zUQueuePutTests.test_cancelled_puts_not_being_held_in_self_putters.<locals>.a_generatorr*   r+   rW   r   )r   r   r   r$   r    r.   r5   r"   r4   r   rk   r   r   r   )r   r   r   r   put_taskr   r   r   2test_cancelled_puts_not_being_held_in_self_putters  s   

z@QueuePutTests.test_cancelled_puts_not_being_held_in_self_puttersc                 C   s   dd }|  |}td}|d ||d}|td |  |	  | 
tj || W d    d S 1 sBw   Y  d S )Nc                   s   r   r   r   r   r   r   r   r   ,  r   zKQueuePutTests.test_cancelled_put_silence_value_error_exception.<locals>.genr*   rW   )r   r   r   r$   r    r.   r5   r"   r/   r   r   r   )r   r   r   r   r   r   r   r   0test_cancelled_put_silence_value_error_exception+  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   1  s    	r   c                   @      e Zd Zdd ZdS )LifoQueueTestsc                    F   t   dD ]} | q fddtdD }| g d| d S )NrH   c                    rJ   r   rK   rL   r%   r   r   rO   N  rP   z-LifoQueueTests.test_order.<locals>.<listcomp>rI   )r-   rI   r*   )r   	LifoQueuer$   rQ   r4   rR   r   r%   r   rU   I  rV   zLifoQueueTests.test_orderNr   r   r   rU   r   r   r   r   r   G      r   c                   @   r   )PriorityQueueTestsc                    r   )NrH   c                    rJ   r   rK   rL   r%   r   r   rO   Y  rP   z1PriorityQueueTests.test_order.<locals>.<listcomp>rI   )r*   r-   rI   )r   PriorityQueuer$   rQ   r4   rR   r   r%   r   rU   T  rV   zPriorityQueueTests.test_orderNr   r   r   r   r   r   R  r   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   s   |   }| t|j d S r   )q_classr   
ValueError	task_doner@   r   r   r   test_task_done_underflowa  s   z,_QueueJoinTestMixin.test_task_done_underflowc                    s     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 )	Nd   r   Tc                     s0   r  I d H }  | 7    sd S d S r   )r!   r   r   )accumulatorr&   runningr   r   workerp  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   y  s    zD_QueueJoinTestMixin.test_task_done.<locals>.test.<locals>.<listcomp>r-   )rQ   join)tasks)r&   r   r   r   r   r`   x  s   z0_QueueJoinTestMixin.test_task_done.<locals>.testF)
r   rQ   r$   r   r5   r4   sumr   r   rw   )r   rS   r`   r   r   )r   r&   r   r   r   r   test_task_donee  s   z"_QueueJoinTestMixin.test_task_donec                    s&   |     fdd}| j|  d S )Nc                      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)r   r   r5   )r   r   r   r%   r   test_join_empty_queue  s   z)_QueueJoinTestMixin.test_join_empty_queuec                 C   s2   |   }| | d d|_| | d d S )Nz	maxsize=0r-   zmaxsize=0 tasks=2)r   r4   _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                   @      e Zd ZejZdS )QueueJoinTestsN)r   r   r   r   r   r   r   r   r   r   r         
r   c                   @   r   )LifoQueueJoinTestsN)r   r   r   r   r   r   r   r   r   r   r     r   r   c                   @   r   )PriorityQueueJoinTestsN)r   r   r   r   r   r   r   r   r   r   r     r   r   __main__)Zunittestr   typesr   Ztest.test_asyncior   r   r   ZTestCaser	   r   rd   r   r   r   r   r   r   r   r   mainr   r   r   r   <module>   s,       ?