B
    v9a¥L  ã               @   sæ   d Z ddlZddlmZ ddlZddlm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râe ¡  dS )zTests for queues.pyé    N)Úmock)Úutilsc                   s   e Zd Z‡ fdd„Z‡  ZS )Ú_QueueTestBasec                s   t ƒ  ¡  |  ¡ | _d S )N)ÚsuperÚsetUpÚnew_test_loopÚloop)Úself)Ú	__class__© ú!/usr/lib/python3.7/test_queues.pyr      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jˆd}ˆ ˆ |ƒ d¡ˆ |ƒ¡ tt|ƒƒˆ |ƒk}ˆ ||¡ ‡ ‡‡fdd„}ˆ |ƒ ¡ ‡ ‡‡fdd„}ˆ |ƒ ¡ tjˆd}| 	d	¡ ˆ d
ˆ |ƒk¡ dS )zŽTest 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()).
        c              3   s.   d V } ˆ   d| ¡ dV } ˆ   d| ¡ dV  d S )Ngš™™™™™¹?gš™™™™™É?)ÚassertAlmostEqual)Úwhen)r	   r   r   Úgen   s
    z.QueueBasicTests._test_repr_or_str.<locals>.gen)r   z<Queuec              “   sR   t jˆd} t j|  ¡ ˆd t jdˆdI d H  ˆ dˆ | ƒk¡ |  d¡ d S )N)r   gš™™™™™¹?z_getters[1]r   )ÚasyncioÚQueueÚTaskÚgetÚsleepÚ
assertTrueÚ
put_nowait)Úq)Úfnr   r	   r   r   Ú
add_getter'   s
    z5QueueBasicTests._test_repr_or_str.<locals>.add_getterc              “   s^   t jdˆd} |  d¡ t j|  d¡ˆd t jdˆdI d H  ˆ dˆ | ƒk¡ |  ¡  d S )Né   )Úmaxsizer   é   )r   gš™™™™™¹?z_putters[1])r   r   r   r   Úputr   r   Ú
get_nowait)r   )r   r   r	   r   r   Ú
add_putter3   s    
z5QueueBasicTests._test_repr_or_str.<locals>.add_putterr   z
_queue=[1]N)
r   r   r   r   Ú
startswithÚhexÚidÚassertEqualÚrun_until_completer   )r	   r   Z	expect_idr   r   Zid_is_presentr   r$   r   )r   r   r	   r   Ú_test_repr_or_str   s    


z!QueueBasicTests._test_repr_or_strc             C   sD   t  ¡ }tj|d}|  |j|¡ tj| jd}|  |j| j¡ d S )N)r   )r   ZMockr   r   ÚassertIsÚ_loopr   )r	   r   r   r   r   r   Útest_ctor_loopD   s
    zQueueBasicTests.test_ctor_loopc             C   s(   t  | j¡ t  ¡ }|  |j| j¡ d S )N)r   Zset_event_loopr   r   r+   r,   )r	   r   r   r   r   Útest_ctor_noloopL   s    z QueueBasicTests.test_ctor_noloopc             C   s   |   td¡ d S )NT)r*   Úrepr)r	   r   r   r   Ú	test_reprQ   s    zQueueBasicTests.test_reprc             C   s   |   td¡ d S )NF)r*   Ústr)r	   r   r   r   Útest_strT   s    zQueueBasicTests.test_strc             C   sV   t j| jd}|  | ¡ ¡ | d¡ |  | ¡ ¡ |  d| ¡ ¡ |  | ¡ ¡ d S )N)r   r   )	r   r   r   r   Úemptyr   ÚassertFalser(   r#   )r	   r   r   r   r   Ú
test_emptyW   s    
zQueueBasicTests.test_emptyc             C   sH   t j| jd}|  | ¡ ¡ t jd| jd}| d¡ |  | ¡ ¡ d S )N)r   r   )r    r   )r   r   r   r4   Úfullr   r   )r	   r   r   r   r   Ú	test_full_   s
    
zQueueBasicTests.test_fullc                sR   t j| jd‰ xdD ]}ˆ  |¡ qW ‡ fdd„tdƒD ƒ}|  dddg|¡ d S )N)r   )r   é   r!   c                s   g | ]}ˆ   ¡ ‘qS r   )r#   )Ú.0Ú_)r   r   r   ú
<listcomp>l   s    z.QueueBasicTests.test_order.<locals>.<listcomp>r8   r   r!   )r   r   r   r   Úranger(   )r	   ÚiÚitemsr   )r   r   Ú
test_orderg   s
    
zQueueBasicTests.test_orderc                sx   ‡fdd„}ˆ  |¡‰tjdˆd‰ˆ 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 )Ng{®Gáz„?g{®Gáz”?)r   )r   )r	   r   r   r   q   s
    z)QueueBasicTests.test_maxsize.<locals>.genr!   )r    r   c              “   s0   x*t dƒD ]} ˆ | ¡I d H  ˆ  | ¡ q
W dS )Nr8   T)r<   r"   Úappend)r=   )Úhave_been_putr   r   r   Úputter~   s    z,QueueBasicTests.test_maxsize.<locals>.putterc              “   sª   t jˆƒ ˆd} t jdˆdI d H  ˆ ddgˆ ¡ ˆ dˆ ¡ ¡ t jdˆdI d H  ˆ dddgˆ ¡ ˆ dˆ ¡ ¡ ˆ dˆ ¡ ¡ ˆ |  ¡ ¡ ˆ |  ¡ ¡ d S )N)r   g{®Gáz„?r   r   r!   )r   r   r   r(   r#   r   ÚdoneÚresult)Út)rA   r   rB   r   r	   r   r   Útest„   s    z*QueueBasicTests.test_maxsize.<locals>.testg{®Gáz”?)r   r   r   r(   r    r)   r   Útime)r	   r   rF   r   )rA   r   rB   r   r	   r   Útest_maxsizeo   s    
zQueueBasicTests.test_maxsizeN)r   r   r   r*   r-   r.   r0   r2   r5   r7   r?   rH   r   r   r   r   r      s   1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                sB   t j| jd‰ ˆ  d¡ ‡ fdd„}| j |ƒ ¡}|  d|¡ d S )N)r   r   c               “   s   ˆ   ¡ I d H S )N)r   r   )r   r   r   Ú	queue_getŸ   s    z2QueueGetTests.test_blocking_get.<locals>.queue_get)r   r   r   r   r)   r(   )r	   rJ   Úresr   )r   r   Útest_blocking_get›   s
    
zQueueGetTests.test_blocking_getc             C   sp   t jd| jd}| d¡ t j| jd}|j |¡ | j | ¡ ¡}|  	d|¡ |  
| ¡ ¡ |  | ¡ ¡ d S )Nr   )r   )r   r   r   r   ZFutureÚ_puttersr@   r)   r   r(   r   rC   ZassertIsNonerD   )r	   r   ZwaiterrK   r   r   r   Útest_get_with_putters¥   s    
z#QueueGetTests.test_get_with_puttersc                s„   ‡fdd„}ˆ  |¡‰tjˆd‰tjˆd‰d‰ ‡ ‡‡fdd„‰‡ ‡‡‡‡‡fdd„}ˆ |ƒ ¡}ˆ d	|¡ ˆ d
ˆ ¡ ¡ d S )Nc              3   s   d V } ˆ   d| ¡ dV  d S )Ng{®Gáz„?)r   )r   )r	   r   r   r   ³   s    z1QueueGetTests.test_blocking_get_wait.<locals>.gen)r   Fc              “   s   ˆ  ¡  ˆ ¡ I d H } d‰ | S )NT)Úsetr   )rK   )Úfinishedr   Ústartedr   r   rJ   ¾   s    z7QueueGetTests.test_blocking_get_wait.<locals>.queue_getc              “   sP   ˆ  dˆjd¡ tjˆƒ ˆd} ˆ ¡ I d H  ˆ ˆ ¡ | I d H }ˆ ˆ ¡ |S )Ng{®Gáz„?r   )r   )Ú
call_laterr   r   r   Úwaitr4   r   )Zqueue_get_taskrK   )rP   r   r   rJ   r	   rQ   r   r   Ú	queue_putÅ   s    


z7QueueGetTests.test_blocking_get_wait.<locals>.queue_putr   g{®Gáz„?)r   r   r   ÚEventr)   r(   r   rG   )r	   r   rT   rK   r   )rP   r   r   rJ   r	   rQ   r   Útest_blocking_get_wait±   s    
	z$QueueGetTests.test_blocking_get_waitc             C   s,   t j| jd}| d¡ |  d| ¡ ¡ d S )N)r   r   )r   r   r   r   r(   r#   )r	   r   r   r   r   Útest_nonblocking_getÒ   s    
z"QueueGetTests.test_nonblocking_getc             C   s"   t j| jd}|  t j|j¡ d S )N)r   )r   r   r   ÚassertRaisesZ
QueueEmptyr#   )r	   r   r   r   r   Útest_nonblocking_get_exception×   s    z,QueueGetTests.test_nonblocking_get_exceptionc                sh   ‡fdd„}ˆ  |¡‰ tjˆ d‰‡ ‡fdd„‰‡ ‡‡fdd„}ˆ dˆ  |ƒ ¡¡ ˆ d	ˆ  ¡ ¡ d S )
Nc              3   s.   d V } ˆ   d| ¡ dV } ˆ   d| ¡ dV  d S )Ng{®Gáz„?g¬Zd;¯?gš™™™™™©?)r   )r   )r	   r   r   r   Ý   s
    z-QueueGetTests.test_get_cancelled.<locals>.gen)r   c               “   s   t jˆ ¡ dˆ dI d H S )Ngé&1¬ª?)r   )r   Úwait_forr   r   )r   r   r   r   rJ   è   s    z3QueueGetTests.test_get_cancelled.<locals>.queue_getc              “   s8   t jˆƒ ˆ d} t jdˆ dI d H  ˆ d¡ | I d H S )N)r   g{®Gáz„?r   )r   r   r   r   )Zget_task)r   r   rJ   r   r   rF   ë   s    
z.QueueGetTests.test_get_cancelled.<locals>.testr   g¸…ëQ¸®?)r   r   r   r(   r)   r   rG   )r	   r   rF   r   )r   r   rJ   r	   r   Útest_get_cancelledÛ   s    
z QueueGetTests.test_get_cancelledc             C   sŽ   t j| jd}t j| ¡ | jd}t j| ¡ | jd}t | j¡ | ¡  t | j¡ |  | 	¡ ¡ | 
d¡ t | j¡ |  | ¡ d¡ d S )N)r   Úa)r   r   r   r   r   Ú
test_utilsÚrun_brieflyÚcancelr   rC   r   r(   rD   )r	   r   Út1Út2r   r   r   Útest_get_cancelled_raceô   s    
z%QueueGetTests.test_get_cancelled_racec             C   s|   t j| jdd}t j| d¡| jd t j| d¡| jd t | j¡ |  | j | 	¡ ¡d¡ |  | j | 	¡ ¡d¡ d S )Nr   )r   r    r\   )r   Úb)
r   r   r   r   r"   r]   r^   r(   r)   r   )r	   r   r   r   r   Útest_get_with_waiting_putters  s    z+QueueGetTests.test_get_with_waiting_puttersc             C   sR   dd„ }dd„ }d}d}t j|| jd}| j t j|||ƒ|||ƒ| jd¡ d S )Nc             Ó   s$   xt |ƒD ]}|  ¡ I d H  q
W d S )N)r<   r   )ÚqueueZnum_expectedr:   r   r   r   Úconsumer  s    z<QueueGetTests.test_why_are_getters_waiting.<locals>.consumerc             Ó   s&   x t |ƒD ]}|  |¡I d H  q
W d S )N)r<   r"   )re   Z	num_itemsr=   r   r   r   Úproducer  s    z<QueueGetTests.test_why_are_getters_waiting.<locals>.producerr   é   )r   )r   r   r   r)   Úgather)r	   rf   rg   Z
queue_sizeZproducer_num_itemsr   r   r   r   Útest_why_are_getters_waiting
  s    z*QueueGetTests.test_why_are_getters_waitingc                s^   dd„ }ˆ   |¡ˆ _‡ fdd„}tjˆ jdd}ˆ j ˆ j ||ƒ¡¡ ˆ  t|jƒd¡ d S )Nc               s   s   dV  dV  d S )Ngš™™™™™¹?gš™™™™™É?r   r   r   r   r   Úa_generator   s    zXQueueGetTests.test_cancelled_getters_not_being_held_in_self_getters.<locals>.a_generatorc             “   s<   y t j|  ¡ dˆ jdI d H }W n t jk
r6   Y nX d S )Ngš™™™™™¹?)r   )r   rZ   r   r   ÚTimeoutError)re   Úitem)r	   r   r   rf   &  s     zUQueueGetTests.test_cancelled_getters_not_being_held_in_self_getters.<locals>.consumerrh   )r   r    r   )	r   r   r   r   r)   Úcreate_taskr(   ÚlenZ_getters)r	   rk   rf   re   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   rL   rN   rV   rW   rY   r[   rb   rd   rj   rp   r   r   r   r   rI   ™   s   
!rI   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 j| jd‰ ‡ fdd„}| j |ƒ ¡ d S )N)r   c               “   s   ˆ   d¡I d H  d S )Nr   )r"   r   )r   r   r   rT   6  s    z2QueuePutTests.test_blocking_put.<locals>.queue_put)r   r   r   r)   )r	   rT   r   )r   r   Útest_blocking_put3  s    zQueuePutTests.test_blocking_putc                sz   ‡fdd„}ˆ  |¡‰tjdˆd‰tjˆd‰d‰ ‡ ‡‡fdd„‰‡ ‡‡‡‡‡fd	d
„}ˆ |ƒ ¡ ˆ dˆ ¡ ¡ d S )Nc              3   s   d V } ˆ   d| ¡ dV  d S )Ng{®Gáz„?)r   )r   )r	   r   r   r   >  s    z1QueuePutTests.test_blocking_put_wait.<locals>.genr   )r    r   )r   Fc               “   s0   ˆ  ¡  ˆ d¡I d H  ˆ d¡I d H  d‰ d S )Nr   r!   T)rO   r"   r   )rP   r   rQ   r   r   rT   I  s    z7QueuePutTests.test_blocking_put_wait.<locals>.queue_putc              “   sN   ˆ  dˆj¡ tjˆƒ ˆd} ˆ ¡ I d H  ˆ ˆ ¡ | I d H  ˆ ˆ ¡ d S )Ng{®Gáz„?)r   )rR   r#   r   r   rS   r4   r   )Zqueue_put_task)rP   r   r   rT   r	   rQ   r   r   rJ   P  s    

z7QueuePutTests.test_blocking_put_wait.<locals>.queue_getg{®Gáz„?)r   r   r   rU   r)   r   rG   )r	   r   rJ   r   )rP   r   r   rT   r	   rQ   r   Útest_blocking_put_wait<  s    
z$QueuePutTests.test_blocking_put_waitc             C   s,   t j| jd}| d¡ |  d| ¡ ¡ d S )N)r   r   )r   r   r   r   r(   r#   )r	   r   r   r   r   Útest_nonblocking_put[  s    
z"QueuePutTests.test_nonblocking_putc             C   s²   dd„ }|   |¡}tj|d}| | ¡ ¡}| tjd|d¡ | d¡ | d¡ | ¡  y| |¡ W n. tj	k
r˜   | | ¡ ¡}| |¡ Y nX | 
¡ }|  d|¡ d S )Nc               s   s   dV  dV  d S )Ng{®Gáz„?gš™™™™™¹?r   r   r   r   r   r   a  s    zBQueuePutTests.test_get_cancel_drop_one_pending_reader.<locals>.gen)r   g{®Gáz„?r   r!   )r   r   r   rn   r   r)   r   r   r_   ÚCancelledErrorrD   r(   )r	   r   r   r   ÚreaderrD   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j|d}| | ¡ ¡}| | ¡ ¡}| | ¡ ¡}| tjd|d¡ | d¡ | d¡ | 	¡  y| |¡ W n tj
k
r¦   Y nX | |¡ |  | ¡ | ¡ hddh¡ d S )Nc               s   s   dV  dV  d S )Ng{®Gáz„?gš™™™™™¹?r   r   r   r   r   r   }  s    zDQueuePutTests.test_get_cancel_drop_many_pending_readers.<locals>.genT)r   g{®Gáz„?r   r!   )r   Z	set_debugr   r   rn   r   r)   r   r   r_   ru   r(   rD   )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jd|d}| d¡ | | d¡¡}| tjd|d¡ | ¡ }|  	|d¡ | 
¡  y| |¡ W n0 tjk
r¨   | | d¡¡}| |¡ Y nX | ¡ }|  	|d¡ |  	| ¡ d¡ d S )Nc               s   s   dV  dV  d S )Ng{®Gáz„?gš™™™™™¹?r   r   r   r   r   r   œ  s    z/QueuePutTests.test_put_cancel_drop.<locals>.genr   )r   r!   g{®Gáz„?r   )r   r   r   r   rn   r"   r)   r   r#   r(   r_   ru   Úqsize)r	   r   r   r   ÚwriterZvalue1Zvalue2r   r   r   Útest_put_cancel_dropš  s"    

z"QueuePutTests.test_put_cancel_dropc             C   s0   t jd| jd}| d¡ |  t j|jd¡ d S )Nr   )r    r   r!   )r   r   r   r   rX   Ú	QueueFull)r	   r   r   r   r   Útest_nonblocking_put_exception¸  s    
z,QueuePutTests.test_nonblocking_put_exceptionc                st   t jdˆjd‰ ˆ  d¡ ˆ  d¡ ˆ ˆ  ¡ ¡ ˆ t jˆ jd¡ t jdˆjd‰ ‡ ‡fdd„}ˆj |ƒ ¡ d S )NgÍÌÌÌÌÌô?)r    r   r   r!   r8   c               “   s2   ˆ   d¡I d H  ˆ   d¡I d H  ˆ ˆ  ¡ ¡ d S )Nr   r!   )r"   r   r6   r   )r   r	   r   r   rT   Æ  s    z3QueuePutTests.test_float_maxsize.<locals>.queue_put)	r   r   r   r   r   r6   rX   r|   r)   )r	   rT   r   )r   r	   r   Útest_float_maxsize½  s    

z QueuePutTests.test_float_maxsizec                sn   t j| jd‰ ‡ fdd„}‡ fdd„}t j|ƒ | jd}|  d| j |ƒ ¡¡ |  | ¡ ¡ |  | ¡ ¡ d S )N)r   c               “   s   ˆ   d¡I d H  dS )Nr   T)r"   r   )r   r   r   rT   Ï  s    z3QueuePutTests.test_put_cancelled.<locals>.queue_putc               “   s   ˆ   ¡ I d H S )N)r   r   )r   r   r   rF   Ó  s    z.QueuePutTests.test_put_cancelled.<locals>.testr   )	r   r   r   r   r(   r)   r   rC   rD   )r	   rT   rF   rE   r   )r   r   Útest_put_cancelledÌ  s    z QueuePutTests.test_put_cancelledc             C   sØ   t j| jdd}t j| d¡| jd}t j| d¡| jd}t j| d¡| jd}t | j¡ |  | ¡ ¡ |  	| ¡ ¡ | 
¡  t | j¡ |  | ¡ ¡ |  | ¡ d¡ t | j¡ |  | ¡ d¡ | j |¡ d S )Nr   )r   r    r\   )r   rc   ÚX)r   r   r   r   r"   r]   r^   r   rC   r4   r_   r(   r#   r)   )r	   r   Zput_aZput_bZput_cr   r   r   Útest_put_cancelled_raceÛ  s    z%QueuePutTests.test_put_cancelled_racec             C   sX   t j| jd}t j| ¡ | jd}t | j¡ | j | d¡¡ |  	| j |¡d¡ d S )N)r   r\   )
r   r   r   r   r   r]   r^   r)   r"   r(   )r	   r   rE   r   r   r   Útest_put_with_waiting_gettersï  s
    z+QueuePutTests.test_put_with_waiting_gettersc          
      sp   t jdˆjd‰ ‡ fdd„}‡ ‡fdd„}|dƒ}|dƒ}|dƒ}|d	ƒ}ˆj t j|ƒ ||||ˆjd¡ d S )
Nr!   )r   c             “   s   ˆ   | ¡I d H  d S )N)r"   )rm   )re   r   r   rB   û  s    z:QueuePutTests.test_why_are_putters_waiting.<locals>.putterc              “   s<   t jdˆjdI d H  ˆ  ¡ } xt| ƒD ]}ˆ  ¡ }q(W d S )Nr   )r   )r   r   r   ry   r<   r#   )Znumr:   rm   )re   r	   r   r   Úgetterþ  s    z:QueuePutTests.test_why_are_putters_waiting.<locals>.getterr   r   r8   )r   r   r   r)   ri   )r	   rB   rƒ   Zt0r`   ra   Zt3r   )re   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jd|d¡ |  t	|j
ƒd¡ | ¡  |  tj¡ | |¡ W d Q R X |  t	|j
ƒd¡ d S )Nc               s   s   dV  dV  d S )Ng{®Gáz„?gš™™™™™¹?r   r   r   r   r   rk     s    zUQueuePutTests.test_cancelled_puts_not_being_held_in_self_putters.<locals>.a_generatorr   )r   r    g{®Gáz„?)r   r   )r   r   r   r   rn   r"   r)   r   r(   ro   rM   r_   rX   ru   )r	   rk   r   re   Ú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jd|d}| d¡ | | d¡¡}| tjd|d¡ | ¡  | 	¡  |  
tj¡ | |¡ W d Q R X d S )Nc               s   s   dV  dV  d S )Ng{®Gáz„?gš™™™™™¹?r   r   r   r   r   r   #  s    zKQueuePutTests.test_cancelled_put_silence_value_error_exception.<locals>.genr   )r   g{®Gáz„?)r   r   r   r   rn   r"   r)   r   r#   r_   rX   ru   )r	   r   r   re   r…   r   r   r   Ú0test_cancelled_put_silence_value_error_exception"  s    

z>QueuePutTests.test_cancelled_put_silence_value_error_exceptionN)r   r   r   rr   rs   rt   rw   rx   r{   r}   r~   r   r   r‚   r„   r†   r‡   r   r   r   r   rq   1  s   	rq   c               @   s   e Zd Zdd„ ZdS )ÚLifoQueueTestsc                sR   t j| jd‰ xdD ]}ˆ  |¡ qW ‡ fdd„tdƒD ƒ}|  dddg|¡ d S )N)r   )r   r8   r!   c                s   g | ]}ˆ   ¡ ‘qS r   )r#   )r9   r:   )r   r   r   r;   E  s    z-LifoQueueTests.test_order.<locals>.<listcomp>r8   r!   r   )r   Ú	LifoQueuer   r   r<   r(   )r	   r=   r>   r   )r   r   r?   @  s
    
zLifoQueueTests.test_orderN)r   r   r   r?   r   r   r   r   rˆ   >  s   rˆ   c               @   s   e Zd Zdd„ ZdS )ÚPriorityQueueTestsc                sR   t j| jd‰ xdD ]}ˆ  |¡ qW ‡ fdd„tdƒD ƒ}|  dddg|¡ d S )N)r   )r   r8   r!   c                s   g | ]}ˆ   ¡ ‘qS r   )r#   )r9   r:   )r   r   r   r;   P  s    z1PriorityQueueTests.test_order.<locals>.<listcomp>r8   r   r!   )r   ÚPriorityQueuer   r   r<   r(   )r	   r=   r>   r   )r   r   r?   K  s
    
zPriorityQueueTests.test_orderN)r   r   r   r?   r   r   r   r   rŠ   I  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   s    | j | jd}|  t|j¡ d S )N)r   )Úq_classr   rX   Ú
ValueErrorÚ	task_done)r	   r   r   r   r   Útest_task_done_underflowX  s    z,_QueueJoinTestMixin.test_task_done_underflowc                s´   ˆj ˆjd‰xtdƒD ]}ˆ |¡ qW d‰ d‰‡ ‡‡fdd„‰‡‡‡fdd„}ˆj |ƒ ¡}ˆ ttdƒƒˆ ¡ d	‰xtt|ƒƒD ]}ˆ d¡ q†W ˆj tj	|ˆjd¡ d S )
N)r   éd   r   Tc              “   s,   x&ˆr&ˆ  ¡ I d H } ˆ | 7 ‰ ˆ ¡  qW d S )N)r   r   )rm   )Úaccumulatorr   Úrunningr   r   Úworkerg  s    z2_QueueJoinTestMixin.test_task_done.<locals>.workerc              “   s*   ‡‡fdd„t dƒD ƒ} ˆ  ¡ I d H  | S )Nc                s   g | ]}t jˆƒ ˆ jd ‘qS ))r   )r   r   r   )r9   Úindex)r	   r”   r   r   r;   p  s   zD_QueueJoinTestMixin.test_task_done.<locals>.test.<locals>.<listcomp>r!   )r<   Újoin)Útasks)r   r	   r”   r   r   rF   o  s    z0_QueueJoinTestMixin.test_task_done.<locals>.testF)
r   r   r<   r   r)   r(   Úsumro   r   rS   )r	   r=   rF   r—   r   )r’   r   r“   r	   r”   r   Útest_task_done\  s    z"_QueueJoinTestMixin.test_task_donec                s,   | j | jd‰ ‡ fdd„}| j |ƒ ¡ d S )N)r   c               “   s    ˆ   ¡ I d H  ˆ   ¡ I d H  d S )N)r–   r   )r   r   r   r–   …  s    z7_QueueJoinTestMixin.test_join_empty_queue.<locals>.join)r   r   r)   )r	   r–   r   )r   r   Útest_join_empty_queue  s    z)_QueueJoinTestMixin.test_join_empty_queuec             C   s8   | j | jd}|  | ¡ d¡ d|_|  | ¡ d¡ d S )N)r   z	maxsize=0r!   zmaxsize=0 tasks=2)r   r   r(   Ú_formatZ_unfinished_tasks)r	   r   r   r   r   Útest_format‹  s    z_QueueJoinTestMixin.test_format)r   r   r   r   r   r™   rš   rœ   r   r   r   r   rŒ   T  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__)Ú__doc__Zunittestr   r   Ztest.test_asyncior   r]   ZTestCaser   r   rI   rq   rˆ   rŠ   rŒ   r   rž   rŸ   r   Úmainr   r   r   r   Ú<module>   s(    	   ?