o
    US`c/                     @   s   d dl Z ddlmZmZ d dlZd dlmZm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 )    N   )wait_all_tasks_blockedassert_checkpoints)open_memory_channelEndOfChannelc                     s*  t t td W d    n1 sw   Y  t t td W d    n1 s.w   Y  td\} }t|  t| | d t  | dI d H  W d    n1 s\w   Y  t t	j
 | d  W d    n1 sww   Y  t  | I d H dksJ W d    n1 sw   Y  | dksJ t t	j
 |  W d    n1 sw   Y  | d |  I d H  t t	j | dI d H  W d    n1 sw   Y  t t	j | d W d    n1 sw   Y  t t	j |   W d    n	1 sw   Y  |  I d H  | dks,J t t | I d H  W d    n	1 sDw   Y  | I d H  t t	j | I d H  W d    n	1 siw   Y  t t	j | I d H  W d    n	1 sw   Y  | I d H  d S )Ng      ?r      lastztoo late)pytestraises	TypeErrorr   
ValueErrorreprsend_nowaitr   sendtrio
WouldBlockreceivereceive_nowaitacloseClosedResourceErrorcloner   )sr r   B/usr/local/lib/python3.10/dist-packages/trio/tests/test_channel.pytest_channel   s`   





r   c                    sd   t d\}}td}| I d H  W d    n1 sw   Y  |js(J |dI d H  d S )Nr   
   zTest for PR #553)r   r   Zmove_on_afterr   Zcancelled_caughtr   )Zautojump_clockr   r   Ztimeout_scoper   r   r   test_5533   s   
r   c               
      s   dd } t d\}}t 4 I d H W}|4 I d H  tdD ]}|| | | qW d   I d H  n1 I d H s;w   Y  g }|2 z3 d H W }|| qD6 |  |ttdks_J W d   I d H  d S 1 I d H spw   Y  d S )Nc              	      sl   | 4 I d H " t d| d|d  D ]
}| |I d H  qW d   I d H  d S 1 I d H s/w   Y  d S )N   r   )ranger   )send_channelijr   r   r   producer<   s   .z1test_channel_multiple_producers.<locals>.producerr   r      )	r   r   open_nurseryr    
start_soonr   appendsortlist)r$   r!   receive_channelnurseryr"   gotvaluer   r   r   test_channel_multiple_producers;   s    (.r/   c               
      s"  t  g   fdd} t 4 I d H Q}td\}}|4 I d H . tdD ]	}|| || q(t I d H  tdD ]
}||I d H  q<W d   I d H  n1 I d H sWw   Y  W d   I d H  n1 I d H slw   Y  t tdks{J t dksJ t  t tdksJ d S )Nc                    s.   | 2 z3 d H W } |  | q6 d S N)addr(   )r+   r"   r.   ZreceivedZsuccessful_receiversr   r   consumerV   s
   
z1test_channel_multiple_consumers.<locals>.consumerr      r   )	setr   r&   r   r    r'   r   r   len)r3   r,   r!   r+   r"   r   r2   r   test_channel_multiple_consumersR   s$   *(	r7   c               	      s.  dd } t d\}}t 4 I d H  }|| |tj t I d H  | I d H  W d   I d H  n1 I d H s9w   Y  ttj |	d  W d    n1 sTw   Y  ttj |
d I d H  W d    n1 srw   Y  tt |  W d    n1 sw   Y  tt | I d H  W d    n1 sw   Y  t d\}}t 4 I d H  }|| |tj t I d H  | I d H  W d   I d H  n1 I d H sw   Y  ttj |	d  W d    n1 sw   Y  ttj |
d I d H  W d    n	1 sw   Y  dd }t d\}}t 4 I d H }||| t I d H  | I d H  W d   I d H  n1 I d H sVw   Y  ttj |  W d    n	1 sqw   Y  ttj | I d H  W d    d S 1 sw   Y  d S )Nc                    B   t | | d I d H  W d    d S 1 sw   Y  d S r0   r
   r   r   r   expectr   r   r   
send_blockj      "z%test_close_basics.<locals>.send_blockr   c                    B   t tj |  I d H  W d    d S 1 sw   Y  d S r0   r
   r   r   r   r   r   r   r   r   receive_block      "z(test_close_basics.<locals>.receive_block)r   r   r&   r'   r   r   r   r
   r   r   r   r   r   r   BrokenResourceErrorr<   r   r   r,   rA   r   r   r   test_close_basicsi   sZ   (
(*
$rE   c               	      s  dd } t d\}}t 4 I d H }|| |tj t I d H  |  W d   I d H  n1 I d H s6w   Y  ttj |	d  W d    n1 sQw   Y  ttj |
d I d H  W d    n1 sow   Y  tt |  W d    n1 sw   Y  tt | I d H  W d    n1 sw   Y  t d\}}t 4 I d H }|| |tj t I d H  |  W d   I d H  n1 I d H sw   Y  ttj |	d  W d    n1 sw   Y  ttj |
d I d H  W d    n	1 sw   Y  dd }t d\}}t 4 I d H }||| t I d H  |  W d   I d H  n1 I d H sMw   Y  ttj |  W d    n	1 shw   Y  ttj | I d H  W d    d S 1 sw   Y  d S )Nc                    r8   r0   r9   r:   r   r   r   r<      r=   z#test_close_sync.<locals>.send_blockr   c                    r>   r0   r?   r@   r   r   r   rA      rB   z&test_close_sync.<locals>.receive_block)r   r   r&   r'   r   r   closer
   r   r   r   r   r   r   rC   rD   r   r   r   test_close_sync   sZ   
(

(
*
$rG   c                     s  t d\} }| }| }| d  | I d H  | W d    n1 s(w   Y  ttj |  W d    n1 sBw   Y  ttj |  W d    n1 s\w   Y  | d  | I d H  ttj | d  W d    d S 1 sw   Y  d S )Nr   )	r   r   r   r   r
   r   r   r   rC   )r   r   r2Zr3r   r   r   $test_receive_channel_clone_and_close   s(   



"rI   c               	      s   t d\ }    fdd}fdd}t 4 I d H .}|| || t I d H    I d H  |  I d H dksBJ W d   I d H  d S 1 I d H sSw   Y  d S )Nr   c                      sD   t tj  dI d H  W d    d S 1 sw   Y  d S )NZnope)r
   r   r   r   r   r   )s1r   r   send_will_close   s   "z9test_close_multiple_send_handles.<locals>.send_will_closec                      s     dI d H  d S Nok)r   r   )s2r   r   send_will_succeed   s   z;test_close_multiple_send_handles.<locals>.send_will_succeedrM   )r   r   r   r&   r'   r   r   r   )r   rK   rO   r,   r   )rJ   rN   r    test_close_multiple_send_handles   s   

.rP   c               	      s   t d\}     fdd}fdd}t 4 I d H +}|| || t I d H    I d H  | dI d H  W d   I d H  d S 1 I d H sPw   Y  d S )Nr   c                      sB   t tj   I d H  W d    d S 1 sw   Y  d S r0   r?   r   )r1r   r   receive_will_close  rB   z?test_close_multiple_receive_handles.<locals>.receive_will_closec                      s      I d H dksJ d S rL   r   r   )rH   r   r   receive_will_succeed  s   zAtest_close_multiple_receive_handles.<locals>.receive_will_succeedrM   )r   r   r   r&   r'   r   r   r   )r   rR   rT   r,   r   )rQ   rH   r   #test_close_multiple_receive_handles  s   

.rU   c                     s   t td\} }|  tdD ]}| | qW d    n1 s"w   Y  g }|2 z3 d H W }|| q+6 |ttdksBJ d S )Ninfr   )r   floatr    r   r(   r*   )r   r   r"   r-   r   r   r   test_inf_capacity  s   rX   c               	      sj  t d\} }|  | ksJ |  }|jdksJ |jdks#J |jdks*J |jdks1J |jdks8J |jdks?J | d  |  jdksMJ | 	 }|  jdksZJ | 
 I d H  | jdksjJ |	 }| jdkswJ |
 I d H  | jdksJ t 4 I d H ;}|d  |  jdksJ ||jd  ||jd  t I d H  |  jdksJ |j  W d   I d H  n1 I d H sw   Y  |  jdksJ z	 |  q tjy   Y nw t 4 I d H &}||j t I d H  |  jdksJ |j  W d   I d H  n1 I d H s$w   Y  |  jdks3J d S )Nr   r   r   )r   
statisticsZcurrent_buffer_usedmax_buffer_sizeZopen_send_channelsZopen_receive_channelsZtasks_waiting_sendZtasks_waiting_receiver   r   r   r   r&   r'   r   r   Zcancel_scopecancelr   r   r   )r   r   statsrN   rH   r,   r   r   r   test_statistics*  sX   

(*r]   c               	      s  t d\} }| d | dksJ | d | dks!J d   fdd}t 4 I d H 6}||| t I d H  | d ttj	 |  W d    n1 sXw   Y  W d   I d H  n1 I d H smw   Y   dksxJ t d\} }| d ttj	 | d  W d    n1 sw   Y  t 4 I d H G}|| j
d t I d H  | dksJ ttj	 | d W d    n1 sw   Y  | I d H dksJ W d   I d H  d S 1 I d H sw   Y  d S )Nr   r   c                    s   |   I d H  d S r0   rS   r@   resultr   r   
do_receivek  s   z)test_channel_fairness.<locals>.do_receiver   )r   r   r   r   r&   r'   r   r
   r   r   r   r   )r   r   r`   r,   r   r^   r   test_channel_fairness\  s>   



(
.ra   c               	      s@  t d\} }ttj |  W d    n1 sw   Y  ttj | d W d    n1 s7w   Y  dd }t 4 I d H 0}||| d t	  |
 I d H dks_J W d    n1 siw   Y  W d   I d H  n1 I d H s~w   Y  ttj |  W d    d S 1 sw   Y  d S )Nr   r   c                    s>   t   | |I d H  W d    d S 1 sw   Y  d S r0   )r   r   )r   vr   r   r   do_send  s   "z test_unbuffered.<locals>.do_send)r   r
   r   r   r   r   r   r&   r'   r   r   )r   r   rc   r,   r   r   r   test_unbuffered  s$   
(
"rd   )r
   testingr   r   r   r   r   r   r   r/   r7   rE   rG   rI   rP   rU   rX   r]   ra   rd   r   r   r   r   <module>   s"    +772+