o
    tPfbU                     @   sH  d Z ddlZddlZz
ddlmZmZ W n ey%   ddlmZmZ Y nw ddlZddl	Z	ddl
mZ ddlmZ dd ZG dd	 d	eZG d
d de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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 dS dS ) z/
Various tests for synchronization primitives.
    N)start_new_thread	get_ident)support)TimeAssertMixinc                   C   s   t d d S )Ng{Gz?)timesleep r   r   X/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/tests/lock_tests.py_wait   s   r
   c                   @   s2   e Zd ZdZdddZdd Zdd Zd	d
 ZdS )Bunchz
    A bunch of threads.
    Fc                    sJ    _ |_g _g _| _ fdd}t|D ]}t|d qdS )z
        Construct a bunch of `n` threads running the same function `f`.
        If `wait_before_exit` is True, the threads won't terminate until
        do_finish() is called.
        c               	      sb   t  } j|  z   W j|  jst  jrd S d S j|  js0t  jr*w N)r   startedappendfinished	_can_exitr
   )tidfselfr   r	   task$   s   zBunch.__init__.<locals>.taskr   N)r   nr   r   r   ranger   )r   r   r   wait_before_exitr   _r   r   r	   __init__   s   	zBunch.__init__c                 C   .   t | j| jk rt  t | j| jk sd S d S r   )lenr   r   r
   r   r   r   r	   wait_for_started0      zBunch.wait_for_startedc                 C   r   r   )r   r   r   r
   r   r   r   r	   wait_for_finished4   r   zBunch.wait_for_finishedc                 C   s
   d| _ d S NT)r   r   r   r   r	   	do_finish8   s   
zBunch.do_finishN)F)__name__
__module____qualname____doc__r   r   r    r"   r   r   r   r	   r      s    
r   c                   @   s   e Zd Zdd Zdd ZdS )BaseTestCasec                 C   s   t  | _d S r   )r   threading_setup_threadsr   r   r   r	   setUp=      zBaseTestCase.setUpc                 C   s   t j| j  t   d S r   )r   threading_cleanupr)   reap_childrenr   r   r   r	   tearDown@   s   zBaseTestCase.tearDownN)r#   r$   r%   r*   r.   r   r   r   r	   r'   <   s    r'   c                   @   X   e Zd 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 )BaseLockTestsz;
    Tests for both recursive and non-recursive locks.
    c                 C      t  r   NotImplementedErrorr   r   r   r	   locktypeJ      zBaseLockTests.locktypec                 C   s   |   }~d S r   )r4   r   lockr   r   r	   test_constructorM   s   zBaseLockTests.test_constructorc                 C      |   }|  ~d S r   )r4   acquirer6   r   r   r	   test_acquire_destroyQ      z"BaseLockTests.test_acquire_destroyc                 C   s   |   }|  |  ~d S r   r4   r:   releaser6   r   r   r	   test_acquire_releaseV   s   z"BaseLockTests.test_acquire_releasec                 C   s$   |   }| |d |  d S NF)r4   
assertTruer:   r>   r6   r   r   r	   test_try_acquire\   s   zBaseLockTests.test_try_acquirec                    sJ   |       g  fdd}t|d  | d     d S )Nc                      s     d d S r@   r   r:   r   r7   resultr   r	   r   e   s   z3BaseLockTests.test_try_acquire_contended.<locals>.f   r   )r4   r:   r   r    assertFalser>   r   r   r   rD   r	   test_try_acquire_contendeda   s   z(BaseLockTests.test_try_acquire_contendedc                    sp   |       d} fdd}t||}|  t  | t|jd    |	  | t|j| d S )N   c                                d S r   r:   r>   r   r7   r   r	   r   o      z/BaseLockTests.test_acquire_contended.<locals>.fr   )
r4   r:   r   r   r
   assertEqualr   r   r>   r    )r   Nr   br   rM   r	   test_acquire_contendedk   s   
z$BaseLockTests.test_acquire_contendedc                    sV   |     fdd}d fdd	}|  t|d  | t|t t|d  d S )Nc                      rK   r   rL   r   rM   r   r	   r   }   rN   z"BaseLockTests.test_with.<locals>.fc                    s6     | d ur	| W d    d S 1 sw   Y  d S r   r   errrM   r   r	   _with   s
   "z&BaseLockTests.test_with.<locals>._withrF   r   )r4   r   r    assertRaises	TypeError)r   r   rU   r   rM   r	   	test_with{   s   zBaseLockTests.test_withc                    sF   |     fdd}tt }t|d  | |tt  d S )Nc                      rK   r   rL   r   rM   r   r	   r      rN   z)BaseLockTests.test_thread_leak.<locals>.f   )r4   r   	threading	enumerater   r    rO   )r   r   r   r   rM   r	   test_thread_leak   s
   zBaseLockTests.test_thread_leakN)r#   r$   r%   r&   r4   r8   r;   r?   rB   rI   rR   rX   r\   r   r   r   r	   r0   E   s    
r0   c                   @   s    e Zd ZdZdd Zdd ZdS )	LockTestszn
    Tests for non-recursive, weak locks
    (which can be acquired and released from different threads).
    c                    s   |    g  fdd}t|d st  rt  | td    tdkr7t  tdks.| td d S )Nc                      s(       d      d  d S r   r:   r   r   r7   phaser   r	   r         
z#LockTests.test_reacquire.<locals>.fr   rF      )r4   r   r
   rO   r   r>   rH   r   r_   r	   test_reacquire   s   
zLockTests.test_reacquirec                    sB   |        fdd}t|d}|        d S )Nc                             d S r   )r>   r   rM   r   r	   r         z*LockTests.test_different_thread.<locals>.frF   )r4   r:   r   r    r>   r   r   rQ   r   rM   r	   test_different_thread   s   
zLockTests.test_different_threadN)r#   r$   r%   r&   rc   rg   r   r   r   r	   r]      s    r]   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )
RLockTestsz$
    Tests for recursive locks.
    c                 C   s<   |   }|  |  |  |  |  |  d S r   r=   r6   r   r   r	   rc      s   zRLockTests.test_reacquirec                 C   sX   |   }| t|j |  |  |  |  |  |  | t|j d S r   )r4   rV   RuntimeErrorr>   r:   r6   r   r   r	   test_release_unacquired   s   z"RLockTests.test_release_unacquiredc                    sH   |     fdd}t|dd}z| t j W |  d S |  w )Nc                      rd   r   )r:   r   rM   r   r	   r      re   z+RLockTests.test_different_thread.<locals>.frF   T)r4   r   rV   ri   r>   r"   rf   r   rM   r	   rg      s   z RLockTests.test_different_threadc                    s   |    |       |       |    g  fdd}t|d  | d     |       |    d S )Nc                      s       d S r   )r   	_is_ownedr   rD   r   r	   r      s   z$RLockTests.test__is_owned.<locals>.frF   r   )r4   rG   rk   r:   rA   r   r    r>   rH   r   rD   r	   test__is_owned   s   zRLockTests.test__is_ownedN)r#   r$   r%   r&   rc   rj   rg   rl   r   r   r   r	   rh      s    	rh   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )
EventTestsz"
    Tests for Event objects.
    c                 C   r1   r   r2   r   r   r   r	   	eventtype   r5   zEventTests.eventtypec                 C   sr   |   }| |  |  | |  |  | |  |  | |  |  | |  d S r   )rn   rG   is_setsetrA   clearr   evtr   r   r	   test_is_set   s   zEventTests.test_is_setc                    s|   d}g g  fdd}t ||}|  t  | td    |  | dg|  | dg|  d S )NrJ   c                      s0                 d S r   )waitr   ro   r   rs   results1results2r   r	   r     s   z#EventTests._check_notify.<locals>.fr   T)r   r   r
   rO   r   rp   r    )r   rs   rP   r   rQ   r   rv   r	   _check_notify  s   
zEventTests._check_notifyc                 C   s0   |   }| | |  |  | | d S r   )rn   ry   rp   rq   rr   r   r   r	   test_notify  s
   
zEventTests.test_notifyc                    s   |    g g d} fdd}t||  | dg|  D ]\}}| | | |dd q$g g    t||  | dg|  D ]	\}}| | qOd S )NrJ   c                     sP     d    t }   d   }t }|||  f d S )Ng        皙?)ru   r   ro   r   )t1rt2rv   r   r	   r   '  s   

z"EventTests.test_timeout.<locals>.fFg
ףp=
?
   T)rn   r   r    rO   rG   assertTimeWithinRangerp   rA   )r   rP   r   r}   dtr   rv   r	   test_timeout"  s$   
zEventTests.test_timeoutN)	r#   r$   r%   r&   rn   rt   ry   rz   r   r   r   r   r	   rm      s    rm   c                   @   sH   e Zd 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S )ConditionTestsz(
    Tests for condition variables.
    c                 G   r1   r   r2   r   argsr   r   r	   condtypeC  r5   zConditionTests.condtypec                 C   s   |   }|  |  |  |  t }|  |}|  | |d |  | |d | |d |  | | |d W d    d S 1 sWw   Y  d S r@   )r   r:   r>   rZ   LockrG   rA   )r   condr7   r   r   r	   test_acquireF  s    
"zConditionTests.test_acquirec                 C      |   }| t|j d S r   )r   rV   ri   ru   r   r   r   r   r	   test_unacquired_waitZ     z#ConditionTests.test_unacquired_waitc                 C   r   r   )r   rV   ri   notifyr   r   r   r	   test_unacquired_notify^  r   z%ConditionTests.test_unacquired_notifyc                    s  d}g g d fdd}t ||}|  t  | g      d t  d   tdk rDt  tdk s;| dgd  | g      d t  d   tt dk r|t  tt dk so| dgd dgd   | dgd        t  d   tdk rt  tdk s| dgd dgd   | dgd dgd   |	  d S )	NrJ   r   c                      sH                         d S r   )r:   ru   r>   r   r   r   	phase_numrw   rx   r   r	   r   g  s   
z'ConditionTests._check_notify.<locals>.f   rF   rb      )
r   r   r
   rO   r:   r   r>   r   
notify_allr    )r   r   rP   r   rQ   r   r   r	   ry   b  sP   
	

zConditionTests._check_notifyc                 C   s    |   }| | | | d S r   )r   ry   r   r   r   r	   rz     s   
zConditionTests.test_notifyc                    sX   |    g d} fdd}t||  | td D ]	}| |dd q d S )NrJ   c                     s<       t }  d t }   ||   d S )Nr{   )r:   r   ru   r>   r   )r|   r~   r   resultsr   r	   r     s   
z&ConditionTests.test_timeout.<locals>.fgRQ?       @)r   r   r    rO   r   r   )r   rP   r   r   r   r   r	   r     s   zConditionTests.test_timeoutN)r#   r$   r%   r&   r   r   r   r   ry   rz   r   r   r   r   r	   r   >  s    2r   c                   @   r/   )BaseSemaphoreTestszB
    Common tests for {bounded, unbounded} semaphore objects.
    c                 G   r1   r   r2   r   r   r   r	   semtype  r5   zBaseSemaphoreTests.semtypec              
   C   s>   | j t| jdd | j ttf| jttdttdd  d d S )N)valuemaxintmaxsize)rV   
ValueErrorr   OverflowErrorgetattrsysr   r   r   r	   r8     s   
z#BaseSemaphoreTests.test_constructorc                 C   sH   |  d}|  |  |  d}|  |  |  |  d S )NrF   rb   )r   r:   r>   r   semr   r   r	   r     s   

zBaseSemaphoreTests.test_acquirec                 C   r9   r   )r   r:   r   r   r   r	   r;     r<   z'BaseSemaphoreTests.test_acquire_destroyc                    s  |  d  g g d  fdd}t|d}|  tt dk r8t  tt dk s+|  dgd  d tdD ]}  qItt dk rgt  tt dk sZ| t	 dgd dgd   d	 tdD ]}  qtt d
k rt  tt d
k s| t	 dgd dgd  d	gd   | 
d   |  d S )N   r   c                      s(             d S r   r^   r   r   rw   rx   r   r   r	   r     ra   z4BaseSemaphoreTests.test_acquire_contended.<locals>.fr      rF      rb      F)r   r:   r   r   r   r
   rO   r   r>   sortedrG   r    )r   r   rQ   r   r   r   r	   rR     s:   


$
.z)BaseSemaphoreTests.test_acquire_contendedc                 C   sV   |  d}| |d | |d | |d |  | |d d S )Nrb   F)r   rA   r:   rG   r>   r   r   r   r	   rB     s   
z#BaseSemaphoreTests.test_try_acquirec                    sV   |  d  g   fdd}t|d  | t dgd dgd   d S )	N   c                      s$     d   d d S r@   rC   r   r   r   r   r	   r     s   z8BaseSemaphoreTests.test_try_acquire_contended.<locals>.frJ   Fr   Tr   )r   r:   r   r    rO   r   rH   r   r   r	   rI     s   
$z-BaseSemaphoreTests.test_try_acquire_contendedc                    sT   |        fdd}t|d}|  t  | |j    |  d S )Nc                      rK   r   rL   r   r   r   r	   r     rN   z0BaseSemaphoreTests.test_default_value.<locals>.frF   )	r   r:   r   r   r
   rG   r   r>   r    rf   r   r   r	   test_default_value  s   
z%BaseSemaphoreTests.test_default_valuec                    sb     dd fdd	}|   d    t|t  d   d S )Nrb   c              	      s   ;   d     d | r| W d    n1 s(w   Y  W d    d S W d    d S 1 s@w   Y  d S r@   )rA   r:   r>   rG   rS   r   r   r	   rU     s   "z+BaseSemaphoreTests.test_with.<locals>._withFr   )r   rA   r:   r>   rV   rW   )r   rU   r   r   r	   rX     s   
zBaseSemaphoreTests.test_withN)r#   r$   r%   r&   r   r8   r   r;   rR   rB   rI   r   rX   r   r   r   r	   r     s    
#r   c                   @      e Zd ZdZdd ZdS )SemaphoreTestsz)
    Tests for unbounded semaphores.
    c                 C   s.   |  d}|  |  |  |  d S NrF   )r   r>   r:   r   r   r   r	   rj   %  s
   
z&SemaphoreTests.test_release_unacquiredNr#   r$   r%   r&   rj   r   r   r   r	   r          r   c                   @   r   )BoundedSemaphoreTestsz'
    Tests for bounded semaphores.
    c                 C   s8   |   }| t|j |  |  | t|j d S r   )r   rV   r   r>   r:   r   r   r   r	   rj   3  s
   z-BoundedSemaphoreTests.test_release_unacquiredNr   r   r   r   r	   r   .  r   r   c                   @   s   e Zd ZdZdZdZdd Zdd Zdd	 Zd
d Z	d"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 )#BarrierTestsz$
    Tests for Barrier objects.
    rJ   r   c                 C   s   | j | j| jd| _d S )Ntimeout)barriertyperP   defaultTimeoutbarrierr   r   r   r	   r*   B  s   zBarrierTests.setUpc                 C   s   | j   d S r   )r   abortr   r   r   r	   r.   D  r+   zBarrierTests.tearDownc                 C   s"   t || jd }|  |  d S r   )r   rP   r    rf   r   r   r	   run_threadsG  s   zBarrierTests.run_threadsc                 C   s   | j j}| || j t|D ]4}|d d | t|d ||  | j   |d d | t|d |d |  | j   q| | j jd | 	| j j
 d S )Nr   TrF   )r   partiesrO   rP   r   r   r   ru   	n_waitingrG   broken)r   r   r   mir   r   r	   	multipassL  s   
zBarrierTests.multipassrF   c                    s&   g g g fdd} | dS )z;
        Test that a barrier is passed in lockstep
        c                      s      d S r   )r   r   passesr   r   r   r	   r   ^  s   z$BarrierTests.test_barrier.<locals>.fNr   )r   r   r   r   r   r	   test_barrierY  s   zBarrierTests.test_barrierc                 C   s
   |  dS )zC
        Test that a barrier works for 10 consecutive runs
        r   )r   r   r   r   r	   test_barrier_10b  s   
zBarrierTests.test_barrier_10c                    s:   g   fdd} | t ttj dS )z9
        test the return value from barrier.wait
        c                     s   j  }  |  d S r   )r   ru   r   )r}   r   r   r   r	   r   m  s   
z(BarrierTests.test_wait_return.<locals>.fN)r   rO   sumr   rP   rH   r   r   r	   test_wait_returnh  s   
zBarrierTests.test_wait_returnc                    s<   g fdd} j|  fdd}| dS )z,
        Test the 'action' callback
        c                      s     d d S r!   )r   r   )r   r   r	   actiony  r+   z(BarrierTests.test_action.<locals>.actionc                      s       td d S r   )ru   rO   r   r   r   r   r   r   r	   r   |  s   z#BarrierTests.test_action.<locals>.fNr   rP   r   )r   r   r   r   r   r	   test_actiont  s
   zBarrierTests.test_actionc                    sZ   g  g  fdd} | t d tjd  jj dS )zK
        Test that an abort will put the barrier in a broken state
        c                     st   zj  } | jd krtj    d W d S  tjy+   d Y d S  ty9   j   Y d S w Nrb   T)r   ru   rP   ri   r   rZ   BrokenBarrierErrorr   r   rw   rx   r   r   r	   r     s   

z"BarrierTests.test_abort.<locals>.fr   rF   N)r   rO   r   rP   rA   r   r   rH   r   r   r	   
test_abort  s   
zBarrierTests.test_abortc                    sd   g  g g  fdd} | t d tjd  tj dS )zL
        Test that a 'reset' on a barrier frees the waiting threads
        c                     s   j  } | jd kr)j jjd k r#td j jjd k sj   nzj    d W n tj	yD   d Y nw j   d d S )Nrb   rF   gMbP?T)
r   ru   rP   r   r   r   resetr   rZ   r   r   rw   rx   results3r   r   r	   r     s   



z"BarrierTests.test_reset.<locals>.fr   rF   N)r   rO   r   rP   rH   r   r   r	   
test_reset  s   
zBarrierTests.test_resetc                    sr   g g g  j  fdd}| td tjd  tj dS )zF
        Test that a barrier can be reset after being broken.
        c                     s   zj  } | jd krtj   d W n tjy)   d Y n ty6   j   Y nw   jd krEj      j   d d S r   )	r   ru   rP   ri   r   rZ   r   r   r   r   barrier2rw   rx   r   r   r   r	   r     s    



z,BarrierTests.test_abort_and_reset.<locals>.fr   rF   N)r   rP   r   rO   r   rH   r   r   r	   test_abort_and_reset  s   
z!BarrierTests.test_abort_and_resetc                    s    fdd}  | dS )z$
        Test wait(timeout)
        c                     s:    j  } |  jd krtd  tj j jd d S )Nrb         ?g      ?)r   ru   rP   r   r   rV   rZ   r   r   r   r   r	   r     s   

z$BarrierTests.test_timeout.<locals>.fNr   rH   r   r   r	   r     s   zBarrierTests.test_timeoutc                    s,   j jdd  fdd}| dS )z4
        Test the barrier's default timeout
        g333333?r   c                     s4      } | jd krtd tj j  d S )Nrb   r   )ru   rP   r   r   rV   rZ   r   r   r   r   r   r	   r     s   
z,BarrierTests.test_default_timeout.<locals>.fNr   rH   r   r   r	   test_default_timeout  s   z!BarrierTests.test_default_timeoutc                 C   s   |  d}|  |  d S r   )r   ru   )r   rQ   r   r   r	   test_single_thread  s   
zBarrierTests.test_single_threadN)rF   )r#   r$   r%   r&   rP   r   r*   r.   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r   ;  s$    
	"r   __main__zSThis module contains no tests; it is used by other test cases like test_threading_2)r&   r   r   threadr   r   ImportError_threadrZ   unittestgevent.testingr   gevent.testing.testcaser   r
   objectr   TestCaser'   r0   r]   rh   rm   r   r   r   r   r   r#   printr   r   r   r	   <module>   s8    '	T$6Knt A