
    iG                        d dl m Z  d dlZd dlZd dlmZ d dlmZ d dlmZ	 d dl
Zd dlZd dlmZ d dlZ G d dej                  Zd Z G d	 d
e          Z G d de	j                  Z G d de          Zd4dZd Zd Zd Zd\  ZZZdZdZe	j        re	j        se	j         se	j!        rdZne	j"        se	j#        rdZ G d de	j                  Z$e	j%         G d de$                      Z&e	j%         G d de$                      Z'e	j%         G d d e$                      Z( G d! d"e$          Z) G d# d$e	j                  Z* G d% d&ej        j+        j,                  Z- G d' d(ej        j+        j,                  Z. G d) d*e	j                  Z/ G d+ d,e	j                  Z0d- Z1 G d. d/e	j                  Z2d0 Z3 G d1 d2e	j                  Z4e5d3k    r e	j6                     dS dS )5    )timeN)Event)QueueExpectedExceptionc                       e Zd Zej        j        Zd Zd Zd Z	de	_
        d Zd Zd Z ej        d          d	             Zd
S )TestCoroutinePoolc                     t                      fd}|                     d          }|                    |d                                            d S )Nc                 0                                      d S N)set)_dones    B/usr/local/lib/python3.11/dist-packages/gevent/tests/test__pool.py	some_workz5TestCoroutinePool.test_apply_async.<locals>.some_work   s    HHJJJJJ       x)r   klassapply_asyncwait)selfr   poolr   s      @r   test_apply_asyncz"TestCoroutinePool.test_apply_async   s]    ww	 	 	 	 	 zz!}}G,,,		r   c                     dfd}|                      d          }|                    |          }|                     |           d S )Nzreturn valuec                       S r    )values   r   r   z/TestCoroutinePool.test_apply.<locals>.some_work   s    Lr   r   r   applyassertEqual)r   r   r   resultr   s       @r   
test_applyzTestCoroutinePool.test_apply   s_    	 	 	 	 	 zz!}}I&&'''''r   c                     |                      d          }d }	 |                    |           |                     d           d S # t          $ r Y d S w xY w)N   c                      t                      r   r   r   r   r   raiserz3TestCoroutinePool.test_apply_raises.<locals>.raiser)   s    #%%%r   z$Should have raised ExpectedException)r   r!   failr   )r   r   r(   s      r   test_apply_raisesz#TestCoroutinePool.test_apply_raises&   sv    zz!}}	& 	& 	&	>JJv II<===== ! 	 	 	DD	s   A 
AAFc                    t                      g fd}fd}|                     d          }|                    |          }|                    |           |                                 |                     g d           d S )Nc                      t          j        d                               d                                             d S )NMbP?prod)geventsleepappendr   evtresultss   r   producerz7TestCoroutinePool.test_multiple_coros.<locals>.producer:   s6    LNN6"""GGIIIIIr   c                                           d                                                                  d           d S )Ncons1cons2)r1   r   r2   s   r   consumerz7TestCoroutinePool.test_multiple_coros.<locals>.consumer?   s:    NN7###HHJJJNN7#####r   r   )r7   r.   r8   )r   r   spawnr   getr"   )r   r5   r9   r   r   r3   r4   s        @@r   test_multiple_corosz%TestCoroutinePool.test_multiple_coros6   s    gg	 	 	 	 	 	
	$ 	$ 	$ 	$ 	$ 	$
 zz!}}zz(##"""


333W=====r   c                     g fdfd}|                      d          }|                    |           t          j        d           |                     g            d S )Nc                  2                          d           d S )NT)r1   )timer_fireds   r   
fire_timerz<TestCoroutinePool.dont_test_timer_cancel.<locals>.fire_timerM   s    t$$$$$r   c                  2    t          j        d            d S )Nr   )r/   timer)r@   s   r   r   z;TestCoroutinePool.dont_test_timer_cancel.<locals>.some_workP   s    LJ'''''r   r   r   )r   r!   r/   r0   r"   )r   r   r   r@   r?   s      @@r   dont_test_timer_cancelz(TestCoroutinePool.dont_test_timer_cancelJ   s    	% 	% 	% 	% 	%	( 	( 	( 	( 	( zz!}}

9Qb)))))r   c                    |                      d          }|                    |j        d df          }|                     |d           t                      }|                    |j                   |                                 d S )Nr&   c                     | dz   S )Nr&   r   as    r   <lambda>z2TestCoroutinePool.test_reentrant.<locals>.<lambda>Z   s
    1q5 r         )r   r!   r"   r   r   r   r   )r   r   r#   r3   s       r   test_reentrantz TestCoroutinePool.test_reentrantX   ss    zz!}}DJ%(@AA###gg!!!




r   zDoes not work on PyPyc                    dd l }|                     d          }|j        }	 t                      |_        |                    t
                    }t          j        d          5  |                     t          |j
                   d d d            n# 1 swxY w Y   t          j        d           |                     |                                d           t          j                            d          5  |                    t          j        d           d d d            n# 1 swxY w Y   ||_        |                                 d S # ||_        |                                 w xY w)Nr   r&   sizer   皙?)r   )sysr   stderrFakeFiler:   crashr/   TimeoutassertRaisesRuntimeErrorr;   r0   r"   
free_count	start_newr!   join)r   rQ   r   
normal_errwaiters        r   test_stderr_raisingz%TestCoroutinePool.test_stderr_raising`   s   
 	


zzqz!! Z
	!CJZZ&&F"" < < !!,
;;;< < < < < < < < < < < < < < < LOOOT__..222))#.. 0 0

6<///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 $CJIIKKKKK $CJIIKKKKsU   AE $!BE BE BAE 7!D$E $D((E +D(,E E)N)__name__
__module____qualname__r/   r   Poolr   r   r$   r*   error_fatalr<   rC   rL   	greentest
skipOnPyPyr]   r   r   r   r	   r	      s        KE  ( ( (
> 
> 
> %*!> > >(* * *   Y122! ! 32! ! !r   r	   c                       t          d          )Nz*Raising an error from the crash() functionrW   )_args_kws     r   rT   rT      s    
C
D
DDr   c                       e Zd Zd ZdS )rS   c                      t          d          )NzWriting to the file failedrf   )r   rg   s     r   writezFakeFile.write   s    7888r   N)r^   r_   r`   rk   r   r   r   rS   rS      s#        9 9 9 9 9r   rS   c                       e Zd Zej        j        Zd Zd Zd Z	e
j        d             Ze
j        d             Ze
j        d             Zd Zd Zd	S )
PoolBasicTestsc                    |                      d          }|                     |                                d           g }|                    |j        d          }|                     |                                d           |                                 |                     |dg           t          j        d           |                     |                                d           |                    |j        d           |                     d|                                           |                     |dg           |                    |j        d           |                     d|                                           |                     |dg           |                    |j        d           |                     |dg           t          j        d           |                     t          |          g d	           d S )
Nr   rN   r&   r   )r   )   )   {Gz?)r&   r   ro   rp   )
r   r"   rX   r:   r1   r;   r/   r0   r   sorted)r   prfirsts       r   test_execute_asyncz!PoolBasicTests.test_execute_async   s   JJAJ+++!$$+++		QC   Q+++ 	
ah&&&ALLNN+++QC   	ah&&&ALLNN+++QC   	ah&&&QC   TLLL11111r   c                 t   |                      d          }|                    t          j        d          }|                    |           |                                 |                     |           |                     t          |          d           |                     |j	        j
        d           d S )Nr&   rN     r   )r   r:   r/   r0   discardkillassertFalser"   len
_semaphorecounter)r   rs   ru   s      r   test_discardzPoolBasicTests.test_discard   s    JJAJd++			%

Q###-q11111r   c                 F   |                      d          }t          j        t          j        d          }	 t          j        t          j        d          }	 |                     |                                d           |                     t          |          d           |                    |           |                     |                                d           |                     t          |          d           |                     t          j	                  5  t          j	        d          5  |                    |           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |                                d           |                     t          |          d           |
                                 n# |
                                 w xY w	 |
                                 d S # |
                                 w xY w)Nr&   rN   rx   r   rP   )r   r/   r:   r0   r"   rX   r|   addrV   rU   rz   r   rs   ru   seconds       r   test_add_methodzPoolBasicTests.test_add_method   s)   JJAJV\400	\&,55F  333  Q+++e  333  Q+++&&v~66 & &,, & &f& & & & & & & & & & & & & & && & & & & & & & & & & & & & &   333  Q+++JJLLLLLEJJLLLLsm   H
 C
G !E/6EE/E	E/E	 E/#G /E33G 6E37AG H
 G00H
 
H c                 :   |                      d          }t          j        t          j        d          }	 t          j        t          j        d          }	 |                    |           |                     t          j        j                  5  |                    |d           d d d            n# 1 swxY w Y   |                                 n# |                                 w xY w	 |                                 d S # |                                 w xY w)Nr&   rN   rx   F)blocking	r   r/   r:   r0   r   rV   r   PoolFullrz   r   s       r   test_add_method_non_blockingz+PoolBasicTests.test_add_method_non_blocking   s    JJAJV\400		\&,55Fe&&v{';<< 2 2EE&5E1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 JJLLLLLEJJLLLLG   D 9C B4(C 4B88C ;B8<C ?D C**D Dc                 :   |                      d          }t          j        t          j        d          }	 t          j        t          j        d          }	 |                    |           |                     t          j        j                  5  |                    |d           d d d            n# 1 swxY w Y   |                                 n# |                                 w xY w	 |                                 d S # |                                 w xY wNr&   rN   rx   rP   timeoutr   r   s       r   test_add_method_timeoutz&PoolBasicTests.test_add_method_timeout   s    JJAJV\400		\&,55Fe&&v{';<< 1 1EE&%E0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 JJLLLLLEJJLLLLr   c                 :   |                      d          }t          j        t          j        d          }	 t          j        t          j        d          }	 |                    |           |                     t          j        j                  5  |	                    |d           d d d            n# 1 swxY w Y   |
                                 n# |
                                 w xY w	 |
                                 d S # |
                                 w xY wr   )r   r/   r:   r0   Greenletr   rV   r   r   startrz   r   s       r   test_start_method_timeoutz(PoolBasicTests.test_start_method_timeout   s    JJAJV\400		_V\488Fe&&v{';<< 3 3GGFEG2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 JJLLLLLEJJLLLLr   c                     |                                  }|                    d d          }|                     |d           d S )Nc                 
    d| fS )Nfoor   rF   s    r   rH   z+PoolBasicTests.test_apply.<locals>.<lambda>   s
    E1: r   )r&   )r   r&   r    )r   rs   r#   s      r   r$   zPoolBasicTests.test_apply   sB    JJLL--u55,,,,,r   c                 V    d| _         |                     t          | j        d           d S )NF)switch_expectedrV   
ValueErrorr   r   s    r   test_init_errorzPoolBasicTests.test_init_error   s*    $*dj"55555r   N)r^   r_   r`   r/   r   ra   r   rv   r   r   rc   ignores_leakcheckr   r   r   r$   r   r   r   r   rm   rm      s        KE2 2 262 2 2  .    !     !     ! - - -
6 6 6 6 6r   rm   c                       e Zd Zd Zd ZdS )TimingWrapperc                 "    || _         d | _        d S r   )funcelapsed)r   r   s     r   __init__zTimingWrapper.__init__	  s    	r   c                     t                      }	  | j        |i |t                      |z
  | _        S # t                      |z
  | _        w xY wr   )r   r   r   )r   argskwdsts       r   __call__zTimingWrapper.__call__  sP    FF	&49d+d++66A:DLL466A:DL%%%%s	   3 AN)r^   r_   r`   r   r   r   r   r   r   r     s2          & & & & &r   r           c                 4    t          j        |           | | z  S r   )r/   r0   )r   r   s     r   sqrr     s    
Lq5Lr   c                     | | z  S r   r   r   s    r   squaredr     s    q5Lr   c                 \    t          j        t          j                    dz             | | z  S )NrP   )r/   r0   randomr   s    r   sqr_random_sleepr     s&    
L3&'''q5Lr   c               #   \   K   t          d          E d {V  t          j        d           d S )Nro   皙?)ranger/   r0   r   r   r   final_sleepr   #  s:      Qxx
Lr   )gˡE?gQ?gQ?
   rx      d   c                       e Zd Zej        ZdZd Zd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )TestPoolr&   c                     t           j                            |            t          j                            | j                  | _        d S r   )rc   TestCasesetUpr/   r   ra   rO   r   s    r   r   zTestPool.setUp8  s6      &&&K$$TY//			r   c                 8    | j                                          d S r   )r   rZ   r   s    r   cleanupzTestPool.cleanup<  s    	r   c                     | j         j        }|                      |t          d          d           |                      |t          dddi          d           d S )NrI   r   r   r   ro   	   )r   r!   r"   r   )r   papplys     r   r$   zTestPool.test_apply?  s[    T**B///R#q22A66666r   c                    | j         j        }|                      |t          t	          t
                              t          t          t          t	          t
                                                   |                      |t          t	          d                    t          t          t          t	          d                                         d S )Nr   )r   mapr"   r   r   SMALL_RANGElistr   )r   pmaps     r   test_mapzTestPool.test_mapD  s    y}c5#5#566S%P[J\J\=]=]8^8^___c5::..S%**5M5M0N0NOOOOOr   c                     | j                             t          dt          f          }t	          |j                  }|                      |            d           |                     |j        t          d           d S )N   1   r&   )	r   r   r   TIMEOUT1r   r;   r"   assertTimeoutAlmostEqualr   r   resr;   s      r   
test_asynczTestPool.test_asyncI  sh    i##C!X88CG$$###%%ck8Q?????r   c                 b   g }| j                             t          dt          f|j                  }t          |j                  }|                      |            d           |                     |j	        t          d           t          j        d           |                     |dg           d S )Nr   )callbackr   r&   r   )r   r   r   r   r1   r   r;   r"   r   r   r/   r0   )r   r#   r   r;   s       r   test_async_callbackzTestPool.test_async_callbackO  s    i##C!X&-#PPCG$$###%%ck8Q???Q"&&&&&r   c                 D   | j                             t          dt          dz   f          }t	          |j                  }|                     t          j        |t                     | 	                    |j
        t          d           | j                                          d S )NrK   r   r   r&   )r   r   r   TIMEOUT2r   r;   rV   r/   rU   r   r   rZ   r   s      r   test_async_timeoutzTestPool.test_async_timeoutX  s    i##C!X^)<==CG$$&.#x@@@%%ck8Q???	r   c                    | j                             t          t          t                              }|                     t          |          t          t          t          t          t                                                   d S r   )r   imapr   r   r   r"   r   r   r   its     r   test_imap_list_smallzTestPool.test_imap_list_small_  s[    Y^^C{!3!344b4C{1C1C(D(D#E#EFFFFFr   c                 &   | j                             t          t          t                              }t          t                    D ](}|                     t          |          ||z             )|                     t          t          |           d S r   )	r   r   r   r   r   r"   nextrV   StopIterationr   r   is      r   test_imap_it_smallzTestPool.test_imap_it_smallc  w    Y^^C{!3!344{## 	. 	.AT"XXq1u-----r22222r   c                 &   | j                             t          t          t                              }t          t                    D ](}|                     t          |          ||z             )|                     t          t          |           d S r   )	r   r   r   r   LARGE_RANGEr"   r   rV   r   r   s      r   test_imap_it_largezTestPool.test_imap_it_largei  r   r   c                    | j                             t          t          t                              }|                     t          |          t          t          t          t          t                                                   d S r   )	r   r   r   r   r   r"   r   r   r   r   s     r   test_imap_randomzTestPool.test_imap_randomo  s\    Y^^,eK.@.@AAb4GU;5G5G(H(H#I#IJJJJJr   c                 "   | j                             t          t          t                              }|                     t          |          t          t          t          t          t                                                   | j                             t          t          t                              }|                     t          |          t          t          t          t          t                                                   d S r   )
r   imap_unorderedr   r   r   r"   rr   r   r   r   r   s     r   test_imap_unorderedzTestPool.test_imap_unordereds  s    Y%%c5+=+=>>T#gu[7I7I*J*J%K%KLLLY%%c5+=+=>>T#gu[7I7I*J*J%K%KLLLLLr   c                    | j                             t          t          t                              }|                     t          |          t          t          t          t          t                                                   d S r   )
r   r   r   r   r   r"   rr   r   r   r   r   s     r   test_imap_unordered_randomz#TestPool.test_imap_unordered_randomz  s^    Y%%&6k8J8JKKT#gu[7I7I*J*J%K%KLLLLLr   c                     | j                             t          g           }|                     t	          |          g            d S r   )r   r   r   r"   r   r   s     r   test_empty_imap_unorderedz"TestPool.test_empty_imap_unordered~  s;    Y%%c2..b2&&&&&r   c                     | j                             t          g           }|                     t	          |          g            d S r   )r   r   r   r"   r   r   s     r   test_empty_imapzTestPool.test_empty_imap  s9    Y^^C$$b2&&&&&r   c                 n    |                      | j                            t          g           g            d S r   )r"   r   r   r   r   s    r   test_empty_mapzTestPool.test_empty_map  s.    sB//44444r   c                 :   | j                             t          j        dg| j        pddz  z            }t          j        d           t          | j         j                  } |             |                     |j        dd           |	                                 d S )NrP   r   r   r         ?)
r   	map_asyncr/   r0   rO   r   rz   assertTimeWithinRanger   rZ   )r   r#   rz   s      r   test_terminatezTestPool.test_terminate  s    $$V\C5TY_"PQ<Q3RSSSTY^,,""4<c:::r   c                 h    t          j        t          |          dz             t          |          S )Ng      $@)r/   r0   floatstr)r   r   s     r   r0   zTestPool.sleep  s'    U1XX^$$$1vvr   c                     t          | j                            | j        g d                    }| j        j        dk    rg d}ng d}|                     ||           d S )N)r   r&   r   r&   )1012)r   r   r   )r   r   r   r0   rO   r"   )r   r#   expecteds      r   test_imap_unordered_sleepz"TestPool.test_imap_unordered_sleep  sj    di..tz:::FFGG9>Q'''HH'''H*****r   c                    t                      }|                    d           t          j        d|j        t                     t          | j                            d |                    }|                     |dg           d S )N{   rP   c                     | S r   r   r   s    r   rH   z,TestPool.test_imap_no_stop.<locals>.<lambda>  s    q r   )	r   putr/   spawn_laterr   r   r   r   r"   r   qr#   s      r   test_imap_no_stopzTestPool.test_imap_no_stop  sn    GG	c


3}555dinn[[!4455#'''''r   c                    t                      }|                    d           t          j        d|j        t                     t          | j                            d |                    }|                     |dg           d S )Ni  rP   c                     | S r   r   r  s    r   rH   z6TestPool.test_imap_unordered_no_stop.<locals>.<lambda>  s     r   )	r   r  r/   r  r   r   r   r   r"   r  s      r   test_imap_unordered_no_stopz$TestPool.test_imap_unordered_no_stop  sp    GG	d3}555di..{{A>>??$(((((r   c                     t          | j                            t          t	                                          }|                     |g d           d S N)r   r&   rp   )r   r   r   r   r   r"   r   r#   s     r   test_imap_final_sleepzTestPool.test_imap_final_sleep  sC    dinnS+--8899+++++r   c                     t          | j                            t          t	                                          }|                     |g d           d S r  )r   r   r   r   r   r"   r  s     r   test_imap_unordered_final_sleepz(TestPool.test_imap_unordered_final_sleep  sE    di..sKMMBBCC+++++r   c                 ,    t          t          d                    }dgfd} fd} j        j         j        j        fD ]N}dd<    ||||d          } ||          } |            }                     t          |          |           Od S )Nr   r   c                 (    dxx         dz  cc<   | S )Nr   r&   r   )r   _jrunnings     r   short_running_funczFTestPool.test_imap_unordered_bounded_queue.<locals>.short_running_func  s    AJJJ!OJJJHr   c                       fd}|S )Nc                  V   g } t                    D ]\  }}                    d         |dz   k    d                    |                     |           t          j        d                               t          j                  dk    t          j                             | S )Nr   r   rq   )	enumerate
assertTruer1   r/   r0   r|   queue)r#   r   r   mappingr  r   s      r   readerzOTestPool.test_imap_unordered_bounded_queue.<locals>.make_reader.<locals>.reader  s    %g.. Q QDAqOOGAJ!a%$7DDDMM!$$$L&&&OOC$6$6!$;S=O=OPPPPr   r   )r  r  r  r   s   ` r   make_readerz?TestPool.test_imap_unordered_bounded_queue.<locals>.make_reader  s.           Mr   r&   )maxsize)r   r   r   r   r   r"   rr   )	r   iterabler  r  methr  r  lr  s	   `       @r   !test_imap_unordered_bounded_queuez*TestPool.test_imap_unordered_bounded_queue  s    c

###	 	 	 	 		 	 	 	 	 	 I,din< 	2 	2DGAJd-x#$& & &G ![))FAVAYY1111	2 	2r   N)r^   r_   r`   rc   LARGE_TIMEOUT__timeout__rO   r   r   r$   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r0   r   r  r  r  r  r#  r   r   r   r   r   4  s       )KD0 0 0  7 7 7
P P P
@ @ @' ' '  G G G3 3 33 3 3K K KM M MM M M' ' '' ' '5 5 5    + + +( ( () ) ), , ,, , ,
2 2 2 2 2r   r   c                       e Zd ZdZdS )	TestPool2r   Nr^   r_   r`   rO   r   r   r   r'  r'            DDDr   r'  c                       e Zd ZdZdS )	TestPool3ro   Nr(  r   r   r   r+  r+    r)  r   r+  c                       e Zd ZdZdS )
TestPool10r   Nr(  r   r   r   r-  r-    s        DDDr   r-  c                       e Zd ZdZdS )TestPoolUnlimitNr(  r   r   r   r/  r/    s        DDDr   r/  c                       e Zd ZdZd ZdS )	TestPool0r   c                 8   t           j                            d          }|                     d|                                           |                     |                                           |                     d|                    d                     d S )Nr   rN   rq   r   )r/   r   ra   r"   rX   r  fullwait_availabler   rs   s     r   test_wait_fullzTestPool0.test_wait_full  s    K!$$ALLNN+++!!!A,,T,::;;;;;r   N)r^   r_   r`   rO   r6  r   r   r   r1  r1    s(        D< < < < <r   r1  c                       e Zd Zd ZdS )TestJoinSleepc                 
   t           j                                        }|                    t           j        d          }	 |                    |           |                                 d S # |                                 w xY w)Nr   r   r/   r   ra   r:   r0   rZ   rz   r   r   rs   gs       r   r   zTestJoinSleep.wait  sf    KGGFL"%%	FF7F###FFHHHHHAFFHHHHs    A, ,BNr^   r_   r`   r   r   r   r   r8  r8    #            r   r8  c                       e Zd Zd ZdS )TestJoinSleep_raise_errorc                    t           j                                        }|                    t           j        d          }	 |                    |d           |                                 d S # |                                 w xY w)Nr   T)r   raise_errorr:  r;  s       r   r   zTestJoinSleep_raise_error.wait   sh    KGGFL"%%	FF7F555FFHHHHHAFFHHHHs    A- -BNr=  r   r   r   r@  r@    r>  r   r@  c                       e Zd ZdZd ZdS )TestJoinEmptyFc                     t           j                                        }|                                }|                     |d           d S )Nzempty should return true)r/   r   ra   rZ   r  r   rs   r   s      r   testzTestJoinEmpty.test  s=    Kffhh788888r   N)r^   r_   r`   r   rG  r   r   r   rD  rD  	  s(        O9 9 9 9 9r   rD  c                       e Zd ZdZd Zd ZdS )	TestSpawnTc                     t           j                            d          }|                     t	          |          d           |                    t           j        d           |                     t	          |          d           |                    t           j        d           |                     t	          |          d           t          j        t          j        sdnd           |                     t	          |          d           d S )Nr&   r   rP   gRQ?r   )	r/   r   ra   r"   r|   r:   r0   rc   EXPECT_POOR_TIMER_RESOLUTIONr5  s     r   rG  zTestSpawn.test  s    KQQ###	c"""Q###	c"""Q###!GPTTSQQQQ#####r   c                     t           j                            d          }|                     t	          |          d           |                    t           j        d           |                     t	          |          d           |                    d          }|                     |d           |                                }| 	                    |d           |                     t	          |          d           d S )Nr&   r   rP   rq   z*waiting on a full pool should return falsez waiting to finish should be true)
r/   r   ra   r"   r|   r:   r0   rZ   r{   r  rF  s      r   testSpawnAndWaitzTestSpawn.testSpawnAndWait  s    KQQ###	c"""Q###ffTllJKKKffhh?@@@Q#####r   N)r^   r_   r`   r   rG  rM  r   r   r   rI  rI    s7        O$ $ $	$ 	$ 	$ 	$ 	$r   rI  c               #   $   K   dV  dV  t           )Nr&   r   r   r   r   r   
error_iterrO  *  s      
GGG
GGG
r   c                       e Zd ZdZd Zd ZdS )TestErrorInIteratorFc                     t           j                            d          }|                     t          |j        d t                                 t          j        d           d S )Nro   c                     d S r   r   r   s    r   rH   z*TestErrorInIterator.test.<locals>.<lambda>5  s    d r   r-   )r/   r   ra   rV   r   r   rO  r0   r5  s     r   rG  zTestErrorInIterator.test3  sP    KQ+QUNNJLLQQQUr   c                     t           j                            d          fd}|                     t          |           t          j        d           d S )Nro   c                  d    t                               d t                                          S )Nc                     d S r   r   r   s    r   rH   zGTestErrorInIterator.test_unordered.<locals>.unordered.<locals>.<lambda><  s    4 r   )r   r   rO  )rs   s   r   	unorderedz5TestErrorInIterator.test_unordered.<locals>.unordered;  s'    ((FFGGGr   r-   )r/   r   ra   rV   r   r0   )r   rW  rs   s     @r   test_unorderedz"TestErrorInIterator.test_unordered8  se    KQ	H 	H 	H 	H 	H 	+Y777Ur   N)r^   r_   r`   rb   rG  rX  r   r   r   rQ  rQ  0  s7        K  
    r   rQ  c                     d| z  S )N      ?r   r   s    r   	divide_byr[  B  s    7Nr   c                   $    e Zd ZdZd Zd Zd ZdS )TestErrorInHandlerFc                     t           j                            d          }|                     t          |j        t          g d           d S )Nro   r&   r   r   )r/   r   ra   rV   ZeroDivisionErrorr   r[  r5  s     r   r   zTestErrorInHandler.test_mapI  s>    KQ+QUIyyyIIIIIr   c                    t           j                            d          }|                    t          g d          }|                     t          |          d           |                     t          t          |           |                     t          |          d           |                     t          t          |           d S Nr&   r_  rZ  r   )
r/   r   ra   r   r[  r"   r   rV   r`  r   r   rs   r   s      r   	test_imapzTestErrorInHandler.test_imapM  s    KQVVIyyy))b3'''+T2666b3'''-r22222r   c                    t           j                            d          }|                    t          g d          }|                     t          |          d           |                     t          t          |           |                     t          |          d           |                     t          t          |           d S rb  )
r/   r   ra   r   r[  r"   r   rV   r`  r   rc  s      r   r   z&TestErrorInHandler.test_imap_unorderedU  s    KQi33b3'''+T2666b3'''-r22222r   N)r^   r_   r`   rb   r   rd  r   r   r   r   r]  r]  F  sI        KJ J J3 3 33 3 3 3 3r   r]  __main__)r   )7r   r/   gevent.poolgevent.eventr   gevent.queuer   gevent.testingtestingrc   gevent.testing.timingr   r   unittestr   r	   rT   objectrS   rm   r   r   r   r   r   r   r   TIMEOUT3r   r   PYPYWINRUN_LEAKCHECKSRUN_COVERAGERUNNING_ON_CIrK  r   r   r'  r+  r-  r/  r1  timingAbstractGenericWaitTestCaser8  r@  rD  rI  rO  rQ  r[  r]  r^   mainr   r   r   <module>rx     s                          " " " " " "      , , , , , , s s s s s) s s slE E E9 9 9 9 9v 9 9 9r6 r6 r6 r6 r6Y' r6 r6 r6p& & & & &F & & &   
    
  
  2 (H N y} )A YE[ KK 	 F Kb2 b2 b2 b2 b2y! b2 b2 b2H                            h   < < < < <	" < < <    FN)E        5 Q   9 9 9 9 9I& 9 9 9$ $ $ $ $	" $ $ $0      ),   $  3 3 3 3 3+ 3 3 30 zIN r   