B
    H/\                 @   s   d dl mZmZmZ d dlZd dlmZ d dlmZ d dl	Z	d dl	m
Z
 d dlmZ ejZG dd deZG dd	 d	eZG d
d dejZG dd de	jZedkre  dS )    )print_functiondivisionabsolute_importN)timing)pool)Timeoutc               @   s   e Zd ZdS )SpecialErrorN)__name__
__module____qualname__ r   r   =lib/python3.7/site-packages/gevent/tests/test__greenletset.pyr      s   r   c               @   s   e Zd Zdd Zdd ZdS )Undeadc             C   s
   d| _ d S )Nr   )
shot_count)selfr   r   r   __init__   s    zUndead.__init__c             C   sH   xByt d W q tk
r&   P Y q   |  jd7  _Y qX qW d S )N   )geventsleepr   r   )r   r   r   r   __call__   s    zUndead.__call__N)r	   r
   r   r   r   r   r   r   r   r      s   r   c               @   sR   e Zd Zej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 )Testc             C   s   t  }|tjtj | t|d| |tjtjd  | t|d| t  ttjd tj	  | t|d| ttjd tj	  | 
| d S )Nr         )r   Groupspawnr   r   r   
LARGE_TICKassertEquallenZLARGE_TICK_MIN_ADJassertFalse)r   sr   r   r   
test_basic$   s    zTest.test_basicc             C   s   t  }|tjt |tjtd  t|dks<t|t }|j	dd t | }| 
| | t|d | |td td  d S )Nr   T)Zraise_errorr   gffffff?g      @)r   r   r   r   r   DELAYr   AssertionErrortimejoinr   r   ZassertTimeWithinRange)r   r   startdeltar   r   r   test_waitall0   s    
zTest.test_waitallc             C   s   t  }|tjt |tjtd  t|dks<t|t }|	  | 
| | t|d t | }|td k st|d S )Nr   r   g?)r   r   r   r   r   r!   r   r"   r#   killr   r   )r   r   r%   r&   r   r   r   test_kill_block<   s    
zTest.test_kill_blockc             C   s   t  }|tjt |tjtd  t|dks<t||jdd t|dks\t|td | 	| | 
t|d d S )Nr   F)blockg-C6?r   )r   r   r   r   r   r!   r   r"   r(   r   r   )r   r   r   r   r   test_kill_noblockH   s    

zTest.test_kill_noblockc                sf  t  t  t t fdd}td t g}t|d| |dd |j dd |dd td |dd |  |dd |  |dd |j	dd |j	dd |j	dd |dd tt
 |dd t }tjt
|j	d	|d
}||ks.tt|t|dksDt||dd  	t 	t d S )Nc                sP         j  j j|  j| d S )N)Z
assertTruer   deadr   r   )Zcount1Zcount2)p1p2r   u1u2r   r   checkY   s    

z(Test.test_kill_fires_once.<locals>.checkg{Gz?r   r   F)r*   r   T)r*   Ztimeout_value)r   r   r   r   r   r   r   r   Zkilloner(   r!   objectZwith_timeoutr"   reprr   )r   r1   r   XZkill_resultr   )r-   r.   r   r/   r0   r   test_kill_fires_onceS   s<    















zTest.test_kill_fires_oncec             C   s6   t dd }t dd }t||g}|  d S )Nc               S   s   dd S )Nr   r   r   r   r   r   r   <lambda>}   s    z,Test.test_killall_subclass.<locals>.<lambda>c               S   s
   t dS )N
   )r   r   r   r   r   r   r6   ~   s    )GreenletSubclassr   r   r   r(   )r   r-   r.   r   r   r   r   test_killall_subclass|   s    zTest.test_killall_subclassc             C   sj   t dd }t dd }t }|| || tj|dd td x|D ]}|jsTtqTW d S )Nc               S   s
   t dS )Ng      ?)r   r   r   r   r   r   r6      s    z?Test.test_killall_iterable_argument_non_block.<locals>.<lambda>c               S   s
   t dS )Ng      ?)r   r   r   r   r   r   r6      s    F)r*   g      ?)	r8   r   setaddr   killallr   r,   r"   )r   r-   r.   r   gr   r   r   (test_killall_iterable_argument_non_block   s    



z-Test.test_killall_iterable_argument_non_blockc          	   C   sz   dd }t |}t |}t }|| || | t tj|dd W d Q R X x|D ]}| |j	| q`W d S )Nc               S   s*   yt d W n   t d Y nX d S )Ng      ?r   )r   r   r   r   r   r   f   s    z6Test.test_killall_iterable_argument_timeout.<locals>.fg      ?)Ztimeout)
r8   r   r:   r;   ZassertRaisesr   r   r<   r   r,   )r   r?   r-   r.   r   r=   r   r   r   &test_killall_iterable_argument_timeout   s    




z+Test.test_killall_iterable_argument_timeoutN)r	   r
   r   	greentestZLARGE_TIMEOUTZ__timeout__r    r'   r)   r+   r5   r9   r>   r@   r   r   r   r   r       s   )r   c               @   s   e Zd ZdS )r8   N)r	   r
   r   r   r   r   r   r8      s   r8   __main__)Z
__future__r   r   r   r#   Zgevent.testingZtestingrA   r   r   r   Zgevent.timeoutr   r   r!   	Exceptionr   r2   r   ZTestCaser   ZGreenletr8   r	   mainr   r   r   r   <module>   s   