a
    _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re  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| | d| qT|d  |d  |d  t|t|fD ](}| d| | d	| | d
| qd S )N   maxsizez<Queuez	maxsize=1z
getters[1]puttersZtasksgettersz
putters[1]ztasks=2)r   QueueZassertInhexidreprZassertNotInstrget
assertTrue
startswithput)selfqZq_str r   7lib/python3.9/site-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       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   Zput2r   r   r   test_maxsize7   s     
zQueueBasicTest.test_maxsizeN)__name__
__module____qualname__r   r+   r   r4   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   s&   t  }|d | d|  d S r9   )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   r-   Z
QueueEmptyr   r:   r   r   r   test_nonblocking_get_exceptionX   s    z+QueueGetTest.test_nonblocking_get_exceptionc                 c   s@   t d}|d |d}| d| V  | |V  d S Nr
   r   )r   r   r&   r   r(   r   ZassertIsNoner   r   r   r   r   r   test_get_with_putters\   s
    


z"QueueGetTest.test_get_with_puttersc                 c   sr   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   {Gz?r
   {Gz?r   ZsecondsZ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   sn   t  }|jtddd}| }| t |V  W d    n1 sH0    Y  |d | d|V  d S )NrB   rD   rE   r   )r   r   r   r   r-   r   r&   r(   )r   r   Zget_timeoutr   r   r   r   test_get_timeoutm   s    $
zQueueGetTest.test_get_timeoutc                 c   sB   t  }|jtddd}|d tdV  | d|V  d S )NrB   rD   rE   r   rC   )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 qd S )Nr
   c                    s   g | ]}  |td dqS rB   rD   r   r   r!   r)   r#   r   r   r$      r%   zBQueueGetTest.test_get_clears_timed_out_putters.<locals>.<listcomp>
   rC      r   )r   r   r'   r   r(   len_puttersr   rJ   r1   r3   r   r-   r   resultr   r   r   Z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 qd S )Nc              	      s"   g | ]}t  td dqS rL   asyncioensure_futurer   r   r    r#   r   r   r$      s   zBQueueGetTest.test_get_clears_timed_out_getters.<locals>.<listcomp>rO   rP   rC   r   )r   r   r'   rW   rX   r   r(   rQ   _gettersr   rJ   r1   r3   r-   r   rS   r   r   r   getterr   r#   r   !test_get_clears_timed_out_getters   s    
z.QueueGetTest.test_get_clears_timed_out_gettersc                 #   sL   t   tdD ]} | q fdd}| V }| |ttd d S )N   c                     s6   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)   ra   r`   r   r#   r   test_async_for   s    zQueueGetTest.test_async_forN)r5   r6   r7   r   r;   r<   r>   rA   rH   rI   rK   rU   r\   rc   r   r   r   r   r8   L   s$   







r8   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   s&   t  }|d | d|  d S r9   )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 r?   )r   r   r   r-   	QueueFullr&   r:   r   r   r   test_nonblocking_put_exception   s    

z+QueuePutTest.test_nonblocking_put_exceptionc                 c   sP   t  }| }| }|dV  | d|V  |dV  | d|V  d S Nr   r
   )r   r   r   r   r(   r   r   Zget0Z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 rh   )r   r   r   r&   r   momentr(   ri   r   r   r   !test_nonblocking_put_with_getters   s    

z.QueuePutTest.test_nonblocking_put_with_gettersc                 #   sr   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 r=   )r   r   r#   r   r   get_and_discard   s    z<QueuePutTest.test_blocking_put_wait.<locals>.get_and_discardrB   rC   c                 s   s   | ]}|  V  qd S r=   )r3   )r!   ra   r   r   r   	<genexpr>   r%   z6QueuePutTest.test_blocking_put_wait.<locals>.<genexpr>)r   r   r&   rF   rG   r   r1   any)r   rm   Z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 sX0    Y  | d|  | d|	 V  |V  d S )Nr
   r   rB   rD   rE   r   )
r   r   r&   r   r   r-   r   r(   r   r   )r   r   Zput_timeoutr   r   r   r   test_put_timeout   s    


$zQueuePutTest.test_put_timeoutc                 c   sF   t d}|d |jdtddd}|  tdV  |V  d S )Nr
   r   rB   rD   rE   rC   )r   r   r&   r   r   r   r   rJ   r@   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 qd S )Nr
   c                    s   g | ]}  |td dqS rL   rM   rN   r#   r   r   r$      r%   zBQueuePutTest.test_put_clears_timed_out_putters.<locals>.<listcomp>rO   rC   rP   r   )r   r   r'   r   r(   rQ   rR   r   rJ   r1   r3   r-   r   rS   rT   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 qd S )Nc              	      s"   g | ]}t  td dqS rL   rV   r    r#   r   r   r$     s   zBQueuePutTest.test_put_clears_timed_out_getters.<locals>.<listcomp>rO      rC   r   r
   )r   r   r'   rW   rX   r   r(   rQ   rY   r   rJ   r1   r3   r   r-   r   rS   rZ   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   r0   r1   r2   r&   r-   rf   r(   r   r   r3   r   r@   r   r   r   test_float_maxsize  s"    


zQueuePutTest.test_float_maxsizeN)r5   r6   r7   r   re   rg   rj   rl   rp   rq   rr   rs   ru   rv   r   r   r   r   rd      s&   

	





rd   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 r=   )queue_classr-   r/   	task_doner:   r   r   r   test_task_done_underflow9  s    z&QueueJoinTest.test_task_done_underflowc                 #   sj      tdD ]} | qd_tj fdd}|  |    V  ttdj d S )Nd   r   c                  3   s8      V }  j| 7  _   tt d V  q d S )NrB   )r   accumulatorry   r   rJ   r   itemr   r   r   r   workerE  s    
z,QueueJoinTest.test_task_done.<locals>.worker)	rx   r'   r&   r|   r   	coroutinejoinr(   sum)r   r)   r   r   r   r   test_task_done=  s    
zQueueJoinTest.test_task_donec                 c   sv   |   }|d t| }| |  | V  | |  tj	V  | |  |
  | |  d S r9   )rx   r&   rW   rX   r   r1   r3   r   r   rk   ry   r   )r   r   r   r   r   r   test_task_done_delayS  s    

z"QueueJoinTest.test_task_done_delayc                 c   s    |   }| V  | V  d S r=   )rx   r   r:   r   r   r   test_join_empty_queuea  s    
z#QueueJoinTest.test_join_empty_queuec                 c   sT   |   }|d | t$ |jtdddV  W d    n1 sF0    Y  d S )Nr   rB   rD   rE   )rx   r   r-   r   r   r   r:   r   r   r   test_join_timeoutg  s    
zQueueJoinTest.test_join_timeoutN)r5   r6   r7   r   r   rx   rz   r   r   r   r   r   r   r   r   r   rw   6  s   


rw   c                   @   s   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	rx   r&   r   r2   r   r(   r   r   r0   r:   r   r   r   r+   r  s    



z PriorityQueueJoinTest.test_orderN)r5   r6   r7   r   ZPriorityQueuerx   r   r+   r   r   r   r   r   o  s   r   c                   @   s   e Zd ZejZedd ZdS )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+     s    



zLifoQueueJoinTest.test_orderN)r5   r6   r7   r   Z	LifoQueuerx   r   r+   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )ProducerConsumerTestc                 #   sf   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 d S r=   )r_   r   ry   r   historyr   r   r   consumer  s    z=ProducerConsumerTest.test_producer_consumer.<locals>.consumerc                  3   s   t dD ]}  | V  qd S )NrO   )r'   r   r}   r#   r   r   producer  s    z=ProducerConsumerTest.test_producer_consumer.<locals>.producerrO   )r   r   r   r   r   r(   rb   r'   )r   r   r   r   r   r   test_producer_consumer  s    
z+ProducerConsumerTest.test_producer_consumerN)r5   r6   r7   r   r   r   r   r   r   r     s   r   __main__)rW   Zdatetimer   r   ZunittestZtornador   r   Ztornado.genr   Ztornado.testingr   r   r	   r8   rd   rw   r   r   r   r5   mainr   r   r   r   <module>   s    5e 9