o
    Qœ_�6  ã                   @   sÜ   d dl Z d dlmZ d dlmZ d dlZd dlmZmZ d dlm	Z	 d dl
mZm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eƒZG dd„ deƒZedkrle ¡  dS dS )é    N)Ú	timedelta)Úrandom)ÚgenÚqueues)ÚTimeoutError)Úgen_testÚAsyncTestCasec                   @   s(   e Zd Zdd„ Zdd„ Zedd„ ƒZdS )ÚQueueBasicTestc                 C   sö   t jdd�}|  tt|ƒƒt|ƒ¡ |  tt|ƒƒt|ƒ¡ | ¡  t|ƒt|ƒfD ]"}|  	| 
d¡¡ |  d|¡ |  d|¡ |  d|¡ |  d|¡ q*| d ¡ | d ¡ | d ¡ t|ƒt|ƒfD ]}|  d|¡ |  d	|¡ |  d
|¡ qdd S )Né   ©Úmaxsizez<Queuez	maxsize=1z
getters[1]ÚputtersÚtasksÚgettersz
putters[1]ztasks=2)r   ÚQueueÚassertInÚhexÚidÚreprÚassertNotInÚstrÚgetÚ
assertTrueÚ
startswithÚput)ÚselfÚqÚq_str© r   ú:/usr/lib/python3/dist-packages/tornado/test/queues_test.pyÚtest_repr_and_str   s$   


ýz QueueBasicTest.test_repr_and_strc                    sF   t  ¡ ‰ dD ]}ˆ  |¡ q‡ fdd„tdƒD ƒ}|  g d¢|¡ d S )N)r
   é   é   c                    s   g | ]}ˆ   ¡ ‘qS r   )Ú
get_nowait©Ú.0Ú_©r   r   r   Ú
<listcomp>4   s    z-QueueBasicTest.test_order.<locals>.<listcomp>r!   )r   r   Ú
put_nowaitÚrangeÚassertEqual)r   ÚiÚitemsr   r'   r   Ú
test_order/   s
   zQueueBasicTest.test_orderc                 c   sø   � | j ttjd d� | j ttjdd� tjdd�}|  | ¡ ¡ |  | ¡ ¡ |  	d|j
¡ |  | d¡ ¡ ¡ |  | d¡ ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ | d¡}|  | ¡ ¡ |  	d| ¡ V ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ d S )Nr   éÿÿÿÿr"   r   r
   )ÚassertRaisesÚ	TypeErrorr   r   Ú
ValueErrorr   ÚemptyÚassertFalseÚfullr+   r   r   Údoner   )r   r   Úput2r   r   r   Útest_maxsize7   s"   €
zQueueBasicTest.test_maxsizeN)Ú__name__Ú
__module__Ú__qualname__r    r.   r   r8   r   r   r   r   r	      s
    r	   c                   @   s|   e Zd Zedd„ ƒZdd„ Zdd„ Zedd„ ƒZed	d
„ ƒZedd„ ƒZ	edd„ ƒZ
edd„ ƒZedd„ ƒZedd„ ƒZdS )ÚQueueGetTestc                 c   s*   � t  ¡ }| d¡ |  d| ¡ V ¡ d S ©Nr   )r   r   r)   r+   r   ©r   r   r   r   r   Útest_blocking_getM   s   €
zQueueGetTest.test_blocking_getc                 C   ó&   t  ¡ }| d¡ |  d| ¡ ¡ d S r=   )r   r   r)   r+   r#   r>   r   r   r   Útest_nonblocking_getS   s   
z!QueueGetTest.test_nonblocking_getc                 C   s   t  ¡ }|  t j|j¡ d S ©N)r   r   r0   Ú
QueueEmptyr#   r>   r   r   r   Útest_nonblocking_get_exceptionX   s   z+QueueGetTest.test_nonblocking_get_exceptionc                 c   sB   � t  d¡}| d¡ | d¡}|  d| ¡ V ¡ |  |V ¡ d S ©Nr
   r   )r   r   r)   r   r+   r   ÚassertIsNone©r   r   r   r   r   r   Útest_get_with_putters\   s   €


z"QueueGetTest.test_get_with_puttersc                 c   st   � t  ¡ }| d¡ | j d|jd¡ | j d|jd¡ |  d|jtdd�d�V ¡ |  d|jtdd�d�V ¡ d S )Nr   ç{®Gáz„?r
   ç{®Gáz”?r"   ©Úseconds©Útimeout)	r   r   r   Úio_loopÚ
call_laterr)   r+   r   r   r>   r   r   r   Útest_blocking_get_waitd   s   €
 z#QueueGetTest.test_blocking_get_waitc                 c   sp   � t  ¡ }|jtdd�d�}| ¡ }|  t¡� |V  W d   ƒ n1 s%w   Y  | d¡ |  d|V ¡ d S )NrI   rK   rM   r   )r   r   r   r   r0   r   r)   r+   )r   r   Úget_timeoutr   r   r   r   Útest_get_timeoutm   s   €ÿ
zQueueGetTest.test_get_timeoutc                 c   sD   � t  ¡ }|jtdd�d�}| d¡ t d¡V  |  d|V ¡ d S )NrI   rK   rM   r   rJ   )r   r   r   r   r   r   Úsleepr+   )r   r   r   r   r   r   Útest_get_timeout_preemptedx   s   €
z'QueueGetTest.test_get_timeout_preemptedc                 #   s¼   � t  d¡‰ ‡ fdd„tdƒD ƒ}ˆ  d¡}|  dtˆ jƒ¡ t d¡V  |  dtˆ jƒ¡ |  	| 
¡ ¡ ˆ  d¡ |  dˆ  ¡ V ¡ |  dtˆ jƒ¡ |dd … D ]	}|  t|j¡ qRd S )Nr
   c                    ó   g | ]}ˆ   |td d�¡‘qS ©rI   rK   ©r   r   ©r%   r,   r'   r   r   r(   „   ó    zBQueueGetTest.test_get_clears_timed_out_putters.<locals>.<listcomp>é
   rJ   é   r   )r   r   r*   r   r+   ÚlenÚ_puttersr   rT   r4   r6   r   r0   r   Úresult©r   r   r   Úputterr   r'   r   Ú!test_get_clears_timed_out_putters€   s   €


ÿz.QueueGetTest.test_get_clears_timed_out_puttersc                 #   s¢   � t  ¡ ‰ ‡ fdd„tdƒD ƒ}t ˆ  ¡ ¡}|  dtˆ jƒ¡ t	 
d¡V  |  dtˆ jƒ¡ |  | ¡ ¡ ˆ  ¡  |  dtˆ jƒ¡ |D ]	}|  t|j¡ qEd S )Nc              	      ó"   g | ]}t  ˆ  td d�¡¡‘qS rW   ©ÚasyncioÚensure_futurer   r   r$   r'   r   r   r(   “   ó    ÿzBQueueGetTest.test_get_clears_timed_out_getters.<locals>.<listcomp>r[   r\   rJ   r"   )r   r   r*   re   rf   r   r+   r]   Ú_gettersr   rT   r4   r6   r0   r   r_   ©r   r   r   Úgetterr   r'   r   Ú!test_get_clears_timed_out_getters�   s   €
ÿÿz.QueueGetTest.test_get_clears_timed_out_gettersc                 #   sN   � t  ¡ ‰ tdƒD ]}ˆ  |¡ q	‡ fdd„}|ƒ V }|  |ttdƒƒ¡ d S )Né   c                  “   s8   �g } ˆ 2 z3 d H W }|   |¡ |dkr|   S q6 d S )Né   )Úappend)Úresultsr,   r'   r   r   Úf¦   s   €
ÿþz&QueueGetTest.test_async_for.<locals>.f)r   r   r*   r   r+   Úlist)r   r,   rp   ro   r   r'   r   Útest_async_for    s   €zQueueGetTest.test_async_forN)r9   r:   r;   r   r?   rA   rD   rH   rQ   rS   rU   rb   rk   rr   r   r   r   r   r<   L   s&    







r<   c                   @   s€   e Zd Zedd„ ƒZdd„ Zedd„ ƒZedd„ ƒZed	d
„ ƒZedd„ ƒZ	edd„ ƒZ
edd„ ƒZedd„ ƒZedd„ ƒZdS )ÚQueuePutTestc                 C   r@   r=   )r   r   r   r+   r#   r>   r   r   r   Útest_blocking_put²   s   
zQueuePutTest.test_blocking_putc                 C   s*   t  d¡}| d¡ |  t j|jd¡ d S rE   )r   r   r   r0   Ú	QueueFullr)   r>   r   r   r   Útest_nonblocking_put_exception¸   s   

z+QueuePutTest.test_nonblocking_put_exceptionc                 c   sR   � t  ¡ }| ¡ }| ¡ }| d¡V  |  d|V ¡ | d¡V  |  d|V ¡ d S ©Nr   r
   )r   r   r   r   r+   ©r   r   Úget0Úget1r   r   r   Útest_put_with_getters½   s   €z"QueuePutTest.test_put_with_gettersc                 c   s^   � t  ¡ }| ¡ }| ¡ }| d¡ tjV  |  d|V ¡ | d¡ tjV  |  d|V ¡ d S rw   )r   r   r   r)   r   Úmomentr+   rx   r   r   r   Ú!test_nonblocking_put_with_gettersÇ   s   €

z.QueuePutTest.test_nonblocking_put_with_gettersc                 #   st   � t  d¡‰ ˆ  d¡ ‡ fdd„}| j d|¡ | j d|¡ ˆ  d¡ˆ  d¡g}|  tdd„ |D ƒƒ¡ |V  d S )	Nr
   r   c                      s   ˆ   ¡  d S rB   )r   r   r'   r   r   Úget_and_discardÙ   s   z<QueuePutTest.test_blocking_put_wait.<locals>.get_and_discardrI   rJ   c                 s   s   � | ]}|  ¡ V  qd S rB   )r6   )r%   rp   r   r   r   Ú	<genexpr>ß   s   € z6QueuePutTest.test_blocking_put_wait.<locals>.<genexpr>)r   r   r)   rO   rP   r   r4   Úany)r   r~   Úfuturesr   r'   r   Útest_blocking_put_waitÔ   s   €


z#QueuePutTest.test_blocking_put_waitc                 c   s�   � t  d¡}| d¡ |jdtdd�d�}| d¡}|  t¡� |V  W d   ƒ n1 s-w   Y  |  d| ¡ ¡ |  d| 	¡ V ¡ |V  d S )Nr
   r   rI   rK   rM   r"   )
r   r   r)   r   r   r0   r   r+   r#   r   )r   r   Úput_timeoutr   r   r   r   Útest_put_timeoutâ   s   €


ÿ
zQueuePutTest.test_put_timeoutc                 c   sH   � t  d¡}| d¡ |jdtdd�d�}| ¡  t d¡V  |V  d S )Nr
   r   rI   rK   rM   rJ   )r   r   r)   r   r   r   r   rT   rG   r   r   r   Útest_put_timeout_preemptedò   s   €


z'QueuePutTest.test_put_timeout_preemptedc                 #   sª   � t  d¡‰ ‡ fdd„tdƒD ƒ}ˆ  d¡}|  dtˆ jƒ¡ t d¡V  |  dtˆ jƒ¡ |  	| 
¡ ¡ ˆ  d¡ |  dtˆ jƒ¡ |dd … D ]	}|  t|j¡ qId S )Nr
   c                    rV   rW   rX   rY   r'   r   r   r(   ÿ   rZ   zBQueuePutTest.test_put_clears_timed_out_putters.<locals>.<listcomp>r[   rJ   r\   r"   )r   r   r*   r   r+   r]   r^   r   rT   r4   r6   r0   r   r_   r`   r   r'   r   Ú!test_put_clears_timed_out_puttersû   s   €


ÿz.QueuePutTest.test_put_clears_timed_out_puttersc                 #   sº   � t  ¡ ‰ ‡ fdd„tdƒD ƒ}t ˆ  ¡ ¡}ˆ  ¡  |  dtˆ jƒ¡ t	 
d¡V  |  dtˆ jƒ¡ |  | ¡ ¡ ˆ  d¡ |  dtˆ jƒ¡ |  d|V ¡ |D ]	}|  t|j¡ qQd S )Nc              	      rc   rW   rd   r$   r'   r   r   r(     rg   zBQueuePutTest.test_put_clears_timed_out_getters.<locals>.<listcomp>r[   é   rJ   r   r
   )r   r   r*   re   rf   r   r+   r]   rh   r   rT   r4   r6   r   r0   r   r_   ri   r   r'   r   Ú!test_put_clears_timed_out_getters
  s"   €
ÿ
ÿz.QueuePutTest.test_put_clears_timed_out_gettersc                 c   sæ   � t jdd�}|  | ¡ ¡ |  | ¡ ¡ | d¡ | d¡ |  | ¡ ¡ |  | ¡ ¡ |  t j|jd¡ |  	d| 
¡ ¡ |  | ¡ ¡ |  | ¡ ¡ | d¡V  | d¡}|  | ¡ ¡ |  	d| ¡ V ¡ |V  |  | ¡ ¡ d S )NgÍÌÌÌÌÌô?r   r   r
   r"   r!   )r   r   r   r3   r4   r5   r)   r0   ru   r+   r#   r   r6   r   rG   r   r   r   Útest_float_maxsize  s$   €


zQueuePutTest.test_float_maxsizeN)r9   r:   r;   r   rt   rv   r{   r}   r‚   r„   r…   r†   rˆ   r‰   r   r   r   r   rs   ±   s(    

	





rs   c                   @   sJ   e Zd ZejZdd„ Zedd„ ƒZedd„ ƒZ	edd„ ƒZ
ed	d
„ ƒZdS )ÚQueueJoinTestc                 C   s   |   ¡ }|  t|j¡ d S rB   )Úqueue_classr0   r2   Ú	task_doner>   r   r   r   Útest_task_done_underflow9  s   z&QueueJoinTest.test_task_done_underflowc                 #   sl   � ˆ  ¡ ‰ tdƒD ]}ˆ  |¡ q	dˆ_tj‡ ‡fdd„ƒ}|ƒ  |ƒ  ˆ  ¡ V  ˆ ttdƒƒˆj¡ d S )Néd   r   c                  3   s8   � 	 ˆ   ¡ V } ˆ j| 7  _ˆ  ¡  t tƒ d ¡V  q)NTrI   )r   ÚaccumulatorrŒ   r   rT   r   ©Úitem©r   r   r   r   ÚworkerE  s   €
üz,QueueJoinTest.test_task_done.<locals>.worker)	r‹   r*   r)   r�   r   Ú	coroutineÚjoinr+   Úsum)r   r,   r“   r   r’   r   Útest_task_done=  s   €
zQueueJoinTest.test_task_donec                 c   sx   � |   ¡ }| d¡ t | ¡ ¡}|  | ¡ ¡ | ¡ V  |  | ¡ ¡ tj	V  |  | ¡ ¡ | 
¡  |  | ¡ ¡ d S r=   )r‹   r)   re   rf   r•   r4   r6   r   r   r|   rŒ   r   )r   r   r•   r   r   r   Útest_task_done_delayS  s   €

z"QueueJoinTest.test_task_done_delayc                 c   s"   � |   ¡ }| ¡ V  | ¡ V  d S rB   )r‹   r•   r>   r   r   r   Útest_join_empty_queuea  s   €
z#QueueJoinTest.test_join_empty_queuec                 c   sX   � |   ¡ }| d¡ |  t¡� |jtdd�d�V  W d   ƒ d S 1 s%w   Y  d S )Nr   rI   rK   rM   )r‹   r   r0   r   r•   r   r>   r   r   r   Útest_join_timeoutg  s   €
"ÿzQueueJoinTest.test_join_timeoutN)r9   r:   r;   r   r   r‹   r�   r   r—   r˜   r™   rš   r   r   r   r   rŠ   6  s    


rŠ   c                   @   ó   e Zd ZejZedd„ ƒZdS )ÚPriorityQueueJoinTestc                 c   sš   � | j dd�}| d¡ | d¡ |  | ¡ ¡ | d¡ | d¡ |  d| ¡ ¡ |  d| ¡ V ¡ |  d| ¡ ¡ |  d| ¡ V ¡ |  | ¡ ¡ d S )Nr"   r   )r
   Úa)r   Úb)r!   Úc)r"   Úd©	r‹   r)   r   r5   r   r+   r#   r   r3   r>   r   r   r   r.   r  ó   €



z PriorityQueueJoinTest.test_orderN)r9   r:   r;   r   ÚPriorityQueuer‹   r   r.   r   r   r   r   rœ   o  ó    rœ   c                   @   r›   )ÚLifoQueueJoinTestc                 c   sš   � | j dd�}| d¡ | d¡ |  | ¡ ¡ | d¡ | d¡ |  d| ¡ ¡ |  d| ¡ V ¡ |  d| ¡ ¡ |  d| ¡ V ¡ |  | ¡ ¡ d S )Nr"   r   r
   r   r!   r¡   r>   r   r   r   r.   „  r¢   zLifoQueueJoinTest.test_orderN)r9   r:   r;   r   Ú	LifoQueuer‹   r   r.   r   r   r   r   r¥   �  r¤   r¥   c                   @   s   e Zd Zedd„ ƒZdS )ÚProducerConsumerTestc                 #   sh   � t jdd�‰g ‰ tj‡ ‡fdd„ƒ}tj‡fdd„ƒ}|ƒ  |ƒ V  ˆ ¡ V  |  ttdƒƒˆ ¡ d S )Nr!   r   c                   3   s   � 	 ˆ   ˆ ¡ V ¡ ˆ ¡  qrB   )rn   r   rŒ   r   ©Úhistoryr   r   r   Úconsumer�  s
   €þz=ProducerConsumerTest.test_producer_consumer.<locals>.consumerc                  3   s    � t dƒD ]} ˆ  | ¡V  qd S )Nr[   )r*   r   r�   r'   r   r   Úproducer£  s   €ÿz=ProducerConsumerTest.test_producer_consumer.<locals>.producerr[   )r   r   r   r”   r•   r+   rq   r*   )r   rª   r«   r   r¨   r   Útest_producer_consumer”  s   €
z+ProducerConsumerTest.test_producer_consumerN)r9   r:   r;   r   r¬   r   r   r   r   r§   “  s    r§   Ú__main__)re   Údatetimer   r   ÚunittestÚtornador   r   Útornado.genr   Útornado.testingr   r   r	   r<   rs   rŠ   rœ   r¥   r§   r9   Úmainr   r   r   r   Ú<module>   s$   5e 9ÿ