a
    xd?                     @   s`  d dl Z d dlZddlmZmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
T dd	 Zd
d Zdd Zdd Zdd Zdd Zdd Ze jjdeegdd ddd Zdd Zddl
mZ ddlmZ G d d! d!eZG d"d# d#eZG d$d% d%eZd&d d'd eed(d d)d eegZg d*Ze jjd+eedZ e d,d- Z!e d.d/ Z"e d0d1 Z#dS )2    N   )wait_all_tasks_blockedassert_checkpoints)_core)	_timeouts)sleep_forevermove_on_after)*c               	      s.  t     rJ   jdks$J      s8J t    I d H  W d    n1 sb0    Y  t   g  fdd} t 4 I d H ~}|	|  |	|  t
 I d H  ddgksJ   jdksJ    t
 I d H  g dksJ W d   I d H  q*1 I d H s 0    Y  d S )Nr   c                      s&    d   I d H   d d S )Nsleepingwoken)appendwait erecordr   L/var/www/html/Ranjet/env/lib/python3.9/site-packages/trio/tests/test_sync.pychild   s    
ztest_Event.<locals>.childr
   r   )r
   r
   r   r   )Eventis_set
statisticstasks_waitingsetr   r   r   open_nursery
start_soonr   )r   nurseryr   r   r   
test_Event   s&    ,

r   c               
      s8  t t td W d    n1 s(0    Y  t t td W d    n1 sZ0    Y  td} t|  | jdksJ | jdksJ | jdksJ t t	 | 
  W d    n1 s0    Y  | jdksJ |   | jdksJ | jdksJ |  }|jdksJ |jdks,J |jt gksBJ |jdksRJ t t	 |   W d    n1 s|0    Y  | jdksJ t t	 |  I d H  W d    n1 s0    Y  | jdksJ t   | dI d H  W d    n1 s0    Y  | jdks(J t tj | d W d    n1 sV0    Y  t|  jt dhksJ | t  |  jdgksJ | d | jdksJ t \ | 4 I d H ( | jdksJ W d   I d H  q1 I d H s0    Y  W d    n1 s(0    Y  t 4 I d H }| dI d H  | d	I d H  || jd
 t I d H  | jdksJ |  jdksJ | d	 | jdksJ t tj |   W d    n1 s0    Y  W d   I d H  q 1 I d H s0    Y  | d
 | d d S )N      ?r   r      Zsomeonezthird partyzvalue 1zvalue 2zvalue 3)pytestraises	TypeErrorCapacityLimiter
ValueErrorreprtotal_tokensborrowed_tokensavailable_tokensRuntimeErrorreleaseacquire_nowaitr   	borrowersr   current_taskr   acquirer   acquire_on_behalf_of
WouldBlockZacquire_on_behalf_of_nowaitr   release_on_behalf_ofr   r   r   )cstatsr   r   r   r   test_CapacityLimiter+   sh    &&&(.0* 
^
V
r4   c                     s   ddl m}  t| }t| |j| ks*J |jdks8J |j| ksFJ tt	 |
  W d    n1 sn0    Y  |jdksJ |  |jdksJ |j| ksJ d S )Nr   )infr   )mathr5   r#   r%   r&   r'   r(   r    r!   r)   r*   r+   )r5   r2   r   r   r   test_CapacityLimiter_infp   s    &r7   c               	      s2  t d} tt d| _W d    n1 s.0    Y  tt d| _W d    n1 s^0    Y  tt d| _W d    n1 s0    Y  | jdksJ t 4 I d H ^}tdD ]}|	| j
| t I d H  qt|  jddhksJ |  jdksJ |  jd7  _t|  jh dks:J |  jdksNJ |  jd8  _| jd	kslJ | jdks|J | d | d | d t|  jdhksJ |  jdksJ | d t|  jd	hksJ |  jdks J W d   I d H  q.1 I d H s$0    Y  d S )
Nr   r   r   i   r      >   r   r   r   r9      )r#   r    r!   r"   r&   r$   r   r   ranger   r/   r   r   r   r,   r   r'   r1   )r2   r   ir   r   r   (test_CapacityLimiter_change_total_tokens   s8    $$$



r=   c               	      s   t dd} |  I d H  t 4 I d H 8}|| j t I d H  |j  W d   I d H  qv1 I d H sl0    Y  t| j	dksJ d S )Nr   )r&   r   )
r#   r.   r   r   r   r   cancel_scopecancellenZ_pending_borrowers)Zlimiternr   r   r    test_CapacityLimiter_memleak_548   s    
4rB   c               
      s  t t td W d    n1 s(0    Y  t t td W d    n1 sZ0    Y  td} t|  | jdksJ | jd u sJ |   | jdksJ | 	 j
dksJ |   | jdksJ t  |  I d H  W d    n1 s0    Y  | jdksJ t tj |   W d    n1 s>0    Y  |   | jdks`J t \ | 4 I d H ( | jdksJ W d   I d H  q1 I d H s0    Y  W d    n1 s0    Y  | jdksJ |   g   fdd}t 4 I d H }|||  t I d H   dgks6J | jdksFJ |   | jdks^J t tj |   W d    n1 s0    Y  W d   I d H  q1 I d H s0    Y   dd	gksJ d S )
Nr   r   r   r   r   c                    s&     d |  I d H    d d S Nstartedfinished)r   r.   )sr   r   r   
do_acquire   s    
z"test_Semaphore.<locals>.do_acquirerD   rE   )r    r!   r"   	Semaphorer$   r%   value	max_valuer*   r   r   r+   r   r.   r   r0   r   r   r   )rF   rH   r   r   rG   r   test_Semaphore   sJ    &&,(^VrL   c                     s   t t tddd W d    n1 s,0    Y  t t tddd W d    n1 sb0    Y  tddd} | jdksJ t|  t t |   W d    n1 s0    Y  | jdksJ | 	  | jdksJ |   | jdksJ d S )Nr   r   )rK   r   r   )
r    r!   r"   rI   r$   rK   r%   r*   rJ   r+   )bsr   r   r   test_Semaphore_bounded   s    **&rN   lockclsc                 C   s   | j S N)__name__)fnr   r   r   <lambda>       rS   )idsc              
      s`  |    rJ t}| u s*J t | jtv sDJ t \ 4 I d H *   sfJ t W d   I d H  q1 I d H s0    Y  W d    n1 s0    Y    rJ     sJ     rJ t   I d H  W d    n1 s0    Y    s.J     rDJ   t	
t   W d    n1 sv0    Y    t	
t   W d    n1 s0    Y  d   fdd}t 4 I d H 0}  rJ || t I d H    sJ t	
tj   W d    n1 s@0    Y  t	
t   W d    n1 st0    Y   }t| |j sJ |j u sJ |jdksJ || t I d H   }t| |jdksJ |j  W d   I d H  q(1 I d H s0    Y   }|j r<J |jd u sLJ |jdks\J d S )Nc                	      sP   t   4 I d H " t I d H  W d   I d H  qL1 I d H sB0    Y  d S rP   )r   r-   r   r   Zholder_tasklr   r   holder  s    z,test_Lock_and_StrictFIFOLock.<locals>.holderr   r   )lockedweakrefrefr%   rQ   r   r+   r*   r.   r    r!   r)   r   r   r   r   r0   r   printownerr   r>   r?   )rO   rrX   r   r   r   rV   r   test_Lock_and_StrictFIFOLock   sh    
P.((
((
8r_   c               
      s2  t t ttd W d    n1 s,0    Y  t t tt W d    n1 s^0    Y  t } t|  |  rJ   rJ t   	 I d H  W d    n1 s0    Y  |  sJ   sJ t    rJ  
    sJ t t  
  W d    n1 s,0    Y     t t   I d H  W d    n1 sn0    Y  t t    W d    n1 s0    Y  t t    W d    n1 s0    Y  t  fdd}t 4 I d H }tdD ]}||| t I d H  q 4 I d H      W d   I d H  qt1 I d H sj0    Y    sJ t I d H  dhksJ  4 I d H      W d   I d H  q1 I d H s0    Y  t I d H  h dks J W d   I d H  q.1 I d H s$0    Y  t t 4 I d H 0}tdD ]}||| t I d H  qP 4 I d H T  d   }t| |jdksJ |jjdksJ W d   I d H  q1 I d H s0    Y    jjdksJ t I d H  ddhksJ  4 I d H      W d   I d H  q`1 I d H sV0    Y  W d   I d H  q1 I d H s0    Y  t } 4 I d H R |  z   I d H  W   sJ n  sJ 0 W d   I d H  q1 I d H s0    Y  W d    n1 s$0    Y  d S )Nr   c              	      sT    4 I d H $    I d H  W d   I d H  qF1 I d H s<0    Y  |  d S rP   )r   add)r<   r2   Zfinished_waitersr   r   waiterb  s    8ztest_Condition.<locals>.waiterr9   r   >   r   r   r   r   )r    r!   r"   	ConditionrI   StrictFIFOLockLockrY   r   r.   r+   r)   r*   r   notify
notify_allr   r   r   r;   r   r   r   r\   r   Zlock_statisticsZCancelScoper?   )rW   rb   r   r<   r   Zscoper   ra   r   test_Condition@  s|    *&,(.((66@
@d
rh   )AsyncContextManagerMixin)open_memory_channelc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ChannelLock1c                 C   s2   t |\| _| _t|d D ]}| jd  qd S Nr   )rj   rF   r^   r;   send_nowait)selfcapacity_r   r   r   __init__  s    zChannelLock1.__init__c                 C   s   | j d  d S rP   rF   rm   rn   r   r   r   r+     s    zChannelLock1.acquire_nowaitc                    s   | j d I d H  d S rP   )rF   sendrs   r   r   r   r.     s    zChannelLock1.acquirec                 C   s   | j   d S rP   r^   receive_nowaitrs   r   r   r   r*     s    zChannelLock1.releaseNrQ   
__module____qualname__rq   r+   r.   r*   r   r   r   r   rk     s   rk   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ChannelLock2c                 C   s    t d\| _| _| jd  d S N
   )rj   rF   r^   rm   rs   r   r   r   rq     s    zChannelLock2.__init__c                 C   s   | j   d S rP   ru   rs   r   r   r   r+     s    zChannelLock2.acquire_nowaitc                    s   | j  I d H  d S rP   )r^   Zreceivers   r   r   r   r.     s    zChannelLock2.acquirec                 C   s   | j d  d S rP   rr   rs   r   r   r   r*     s    zChannelLock2.releaseNrw   r   r   r   r   rz     s   rz   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
ChannelLock3c                 C   s   t d\| _| _d| _d S )Nr   F)rj   rF   r^   acquiredrs   r   r   r   rq     s    zChannelLock3.__init__c                 C   s   | j r
J d| _ d S NT)r~   rs   r   r   r   r+     s    
zChannelLock3.acquire_nowaitc                    s2   | j r| jd I d H  nd| _ t I d H  d S r   )r~   rF   rt   r   
checkpointrs   r   r   r   r.     s    zChannelLock3.acquirec                 C   s8   z| j   W n$ tjy2   | js(J d| _Y n0 d S )NF)r^   rv   r   r0   r~   rs   r   r   r   r*     s
    
zChannelLock3.releaseNrw   r   r   r   r   r}     s   r}   c                   C   s   t dS rl   )r#   r   r   r   r   rS     rT   c                   C   s   t dS rl   )rI   r   r   r   r   rS     rT   c                   C   s   t dS r{   rk   r   r   r   r   rS     rT   c                   C   s   t dS rl   r   r   r   r   r   rS     rT   )zCapacityLimiter(1)zSemaphore(1)re   rd   zChannelLock1(10)zChannelLock1(1)rz   r}   lock_factoryc              	      s   d d}dd fdd}t  4 I d H 6}|  }t|D ]}||| q@W d   I d H  q|1 I d H sr0    Y  rJ  | ksJ d S )Nr|   r8   Fr   c              
      s   t  D ]x}| 4 I d H R d7 r*J dt I d H  t I d H  sRJ dW d   I d H  q1 I d H sv0    Y  qd S )Nr   TF)r;   r   r   )	lock_likerp   LOOPSZacquiresZin_critical_sectionr   r   worker  s    z+test_generic_lock_exclusion.<locals>.worker)r   r   r;   r   )r   ZWORKERSr   r   r   rp   r   r   r   test_generic_lock_exclusion  s    8r   c              	      s   g g d  fdd}|  }t  4 I d H @}||d| ||d| ||d| W d   I d H  q1 I d H s~0    Y  t D ]$}d| d|d   ksJ qd S )Nr8   c              
      s^    |  t D ]F}|4 I d H    |  W d   I d H  q1 I d H sN0    Y  qd S rP   )r   r;   )namer   rp   r   Zinitial_orderr   r   r   loopy  s    
z.test_generic_lock_fifo_fairness.<locals>.loopyr   r   r9   )r   r   r   r;   )r   r   r   r   r<   r   r   r   test_generic_lock_fifo_fairness  s    8r   c              	      s   |   g  fdd}t  4 I d H J}   || t I d H  dgksVJ    W d   I d H  q1 I d H s~0    Y  d S )Nc                	      sP    d  4 I d H  W d   I d H  qB1 I d H s80    Y   d d S rC   )r   r   r   r   r   r   
lock_taker,  s    
*zCtest_generic_lock_acquire_nowait_blocks_acquire.<locals>.lock_takerrD   )r   r   r+   r   r   r*   )r   r   r   r   r   r   /test_generic_lock_acquire_nowait_blocks_acquire&  s    
r   )$r    rZ   Ztestingr   r    r   r   r   r   Z_syncr   r4   r7   r=   rB   rL   rN   markZparametrizere   rd   r_   rh   ri   Z_channelrj   rk   rz   r}   Zlock_factoriesZlock_factory_namesZgeneric_lock_testr   r   r   r   r   r   r   <module>   sP   E%0
KT


