
    <e                     L   d Z ddlZddlmZ ddlZddlZddlZdZ ej        e          Zd Z	 G d dej
                  Z G d d	ej
                  Z G d
 dej
                  Z G d dej
                  Z G d dej
                  Zedk    r ej                     dS dS )zTests for locks.py    N)mockz^<(?P<class>.*?) object at (?P<address>.*?)\[(?P<extras>(set|unset|locked|unlocked|filling|draining|resetting|broken)(, value:\d)?(, waiters:\d+)?(, waiters:\d+\/\d+)?)\]>\Zc                  .    t          j        d            d S N)asyncioset_event_loop_policy     3/usr/lib/python3.11/test/test_asyncio/test_locks.pytearDownModuler      s    !$'''''r	   c                   V    e 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 )	LockTestsc                    K   t          j                    }|                     t          |                              d                     |                     t
                              t          |                               |                                 d {V  |                     t          |                              d                     |                     t
                              t          |                               d S )Nz[unlocked]>	[locked]>)r   Lock
assertTruereprendswithRGX_REPRmatchacquireselflocks     r
   	test_reprzLockTests.test_repr   s      |~~T

++M::;;;tDzz22333llnnT

++K88999tDzz2233333r	   c                    K   t          j                    }|                     t          d          5  | d {V  d d d            n# 1 swxY w Y   |                     |                                           d S )Nz/object Lock can't be used in 'await' expression)r   r   assertRaisesRegex	TypeErrorassertFalselockedr   s     r
   	test_lockzLockTests.test_lock%   s      |~~##=
 
 	 	 JJJJJJJ		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	'''''s   	AA
A
c                 :  K   t           j        t           j        t           j        t           j        t           j        g}t          j                    }|D ]I}|                     t          |j	         d          5   ||           d d d            n# 1 swxY w Y   Jd S )Nz8\.__init__\(\) got an unexpected keyword argument 'loop'loop)
r   r   	ConditionEvent	SemaphoreBoundedSemaphoreget_running_loopr   r   __name__)r   primitives_clsr#   clss       r
   &test_lock_doesnt_accept_loop_parameterz0LockTests.test_lock_doesnt_accept_loop_parameter0   s      LM$
 '))! 	 	C''L , , ,   
               	 	s   6BB	B	c                    K   t          j                    t          j                    t          j                    t          j                    g}|D ]}t          j        d           d {V  |                     |                                           |                     t          d          5  | d {V 5  	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |                     |                                           d S )N{Gz?z.object \w+ can't be used in 'await' expression)
r   r   r$   r&   r'   sleepr   r   r   r   )r   
primitivesr   s      r
   test_lock_by_with_statementz%LockTests.test_lock_by_with_statementC   s     LNN$&&	

  		, 		,D-%%%%%%%%%T[[]]+++''A     ZZZZZZ                	               T[[]]++++		, 		,s6   -	C6C8CCCCCC	"C	c                   K   t          j                    g }|                                                      d {V            fd}fd}fd}t          j         ||                    }t          j         ||                    }t          j        d           d {V  |                     g |                                            t          j        d           d {V  |                     dg|           t          j        d           d {V  |                     dg|           t          j         ||                    }                                 t          j        d           d {V  |                     ddg|                                            t          j        d           d {V  |                     g d|           |                     |                                           |                     |	                                           |                     |                                           |                     |	                                           |                     |                                           |                     |	                                           d S )Nc                 j   K                                     d {V r|                     d           dS N   Tr   appendresultr   s    r
   c1z"LockTests.test_acquire.<locals>.c1\   @      \\^^###### !a   4r	   c                 j   K                                     d {V r|                     d           dS N   Tr6   r8   s    r
   c2z"LockTests.test_acquire.<locals>.c2a   r;   r	   c                 j   K                                     d {V r|                     d           dS N   Tr6   r8   s    r
   c3z"LockTests.test_acquire.<locals>.c3f   r;   r	   r   r5   r>   r5   r>   rB   )
r   r   r   r   create_taskr/   assertEqualreleasedoner9   )	r   r9   r:   r?   rC   t1t2t3r   s	           @r
   test_acquirezLockTests.test_acquireV   s     |~~dllnn,,,,,,---	 	 	 	 	
	 	 	 	 	
	 	 	 	 	
  F,, F,,mAV$$$mA!f%%%mA!f%%% F,,mA!Q(((mAF+++		"""		$$$		"""		$$$		"""		$$$$$r	   c                   K   t          j                    }|                     |                                 d {V            t          j        |                                          }t          j                                        |j                   |                     t           j	                  5  | d {V  d d d            n# 1 swxY w Y   | 
                    |j                   d S r   )r   r   r   r   rE   r(   	call_sooncancelassertRaisesCancelledErrorr   _waiters)r   r   tasks      r
   test_acquire_cancelzLockTests.test_acquire_cancel   s     |~~dllnn,,,,,,---"4<<>>22 "",,T[999w566 	 	JJJJJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	'''''s   3	CCCc                   K   t          j                    fd}t          j                                                    }t          j         |d|                    }t          j        d           d {V  |                                                                t          j         |dd                     }t          j        d           d {V  |                     t          j
                  d           t          j         |dd                     }t          j        d           d {V  |                     t          j
                  d           |                    d            |                                 |                     j
        d                                                    t          j        d           d {V  |                                                                |                     |                                           |                     |                                           | d {V  d S )Nc                    K                                     d {V  	 || d {V                                   d S #                                  w xY wr   )r   rG   )nameblockerr   s     r
   lockitz*LockTests.test_cancel_race.<locals>.lockit   sf      ,,..       &!MMMMMMMs	   
? AAr   Br5   Cr>   )r   r   r(   create_futurerE   r/   r   r   rF   lenrR   
set_resultrO   	cancelledr   rH   )r   rY   fatatbtcr   s         @r
   test_cancel_racezLockTests.test_cancel_race   s(      |~~	 	 	 	 	 %''5577 R11mA&&& T!2!233mAT]++Q/// T!2!233mAT]++Q/// 	d
		a(2244555mA'''		"""'''r	   c                   	K   t          j                    }t          j                    ddfd}	fd}                                 d {V  t          j         |                      	t          j         |                      }t          j         |                      }t          j        d           d {V  |                    |           |                     t           j                  5  	 d {V  d d d            n# 1 swxY w Y   | 	                    d           | 	                    d           | 
                    	                                o|                                           |                                 t          j        d           d {V  | 
                    |                                           d S )Nr   c                  T   K    dz                                     d {V  dz  d S Nr5   )r   )
call_countr   
lock_counts   r
   rY   z2LockTests.test_cancel_release_race.<locals>.lockit   s?       !OJ,,..       !OJJJr	   c                  X                                                                        d S r   )rO   rG   )r   rI   s   r
   triggerz3LockTests.test_cancel_release_race.<locals>.trigger   s!    IIKKKLLNNNNNr	   r5   rB   )r   r(   r   r   rE   r/   rN   rP   rQ   rF   r   r`   rH   rO   )
r   r#   rY   rl   rJ   rK   ri   r   rj   rI   s
         @@@@r
   test_cancel_release_racez"LockTests.test_cancel_release_race   s-      '))|~~

	 	 	 	 	 	 		 	 	 	 	 	 llnn ** ** ** mAww566 	 	HHHHHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 	Q'''Q'''427799555 			mA'''''s   :	DDDc                   K   t          j                    }|                                 d {V  |                     |                                           t          j        |                                          }t          j        d           d {V  |                     t          |j	                  d           t          j        |                                          }|
                                 |                                 t          j        d           d {V  |                     |                                           |                     |                                           | d {V  d S Nr   r5   )r   r   r   r   r   rE   r/   rF   r^   rR   rO   rG   r`   )r   r   rc   rd   s       r
   test_finished_waiter_cancelledz(LockTests.test_finished_waiter_cancelled   sF     |~~llnn&&& 00mAT]++Q///  00
		mA&&&''' r	   c                 p   K   t          j                    }|                     t          |j                   d S r   )r   r   rP   RuntimeErrorrG   r   s     r
   test_release_not_acquiredz#LockTests.test_release_not_acquired  s/      |~~,55555r	   c                 (  K   t          j                    }|                                 d {V  |                     |                                           |                                 |                     |                                           d S r   )r   r   r   r   r   rG   r   r   s     r
   test_release_no_waitersz!LockTests.test_release_no_waiters  sz      |~~llnn&&&'''''r	   c                 r  K   t          j                    }|                     |                                           |4 d {V  |                     |                                           d d d           d {V  n# 1 d {V swxY w Y   |                     |                                           d S r   )r   r   r   r   r   r   s     r
   test_context_managerzLockTests.test_context_manager  s      |~~''' 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+OODKKMM***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	'''''   (A??
B	B	N)r)   
__module____qualname__r   r    r,   r1   rL   rT   re   rm   rp   rs   ru   rw   r   r	   r
   r   r      s        4 4 4	( 	( 	(  &, , ,&1% 1% 1%f( ( (- - -^+( +( +(Z  .6 6 6
( ( (( ( ( ( (r	   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )
EventTestsc                 N   t          j                    }|                     t          |                              d                     t
                              t          |                    }|                     |                    d          d           |	                                 |                     t          |                              d                     |                     t
                              t          |                               |j
                            t          j                               |                     dt          |          v            |                     t
                              t          |                               d S )Nz[unset]>extrasunsetz[set]>	waiters:1)r   r%   r   r   r   r   r   rF   groupsetrR   r7   r   Mock)r   evr   s      r
   r   zEventTests.test_repr  s&   ]__R))*55666tBxx((X..888
R))(33444tBxx00111
49;;'''tBxx/000tBxx0011111r	   c                   K   t          j                    |                                                                g }fd}fd}fd}t          j         ||                    }t          j         ||                    }t          j        d           d {V  |                     g |           t          j         ||                    }                                 t          j        d           d {V  |                     g d|           |                     |	                                           | 
                    |                                           |                     |	                                           | 
                    |                                           |                     |	                                           | 
                    |                                           d S )Nc                 n   K                                     d {V r|                     d           d S d S rh   waitr7   r9   r   s    r
   r:   z EventTests.test_wait.<locals>.c13  E      WWYY !a     ! !r	   c                 n   K                                     d {V r|                     d           d S d S )Nr>   r   r   s    r
   r?   z EventTests.test_wait.<locals>.c27  r   r	   c                 n   K                                     d {V r|                     d           d S d S )NrB   r   r   s    r
   rC   z EventTests.test_wait.<locals>.c3;  r   r	   r   )rB   r5   r>   )r   r%   r   is_setrE   r/   rF   r   r   rH   assertIsNoner9   )	r   r9   r:   r?   rC   rI   rJ   rK   r   s	           @r
   	test_waitzEventTests.test_wait-  s     ]__%%%	! 	! 	! 	! 	!	! 	! 	! 	! 	!	! 	! 	! 	! 	!  F,, F,,mAV$$$ F,,
mAF+++		""""))++&&&		""""))++&&&		""""))++&&&&&r	   c                    K   t          j                    }|                                 |                                 d {V }|                     |           d S r   )r   r%   r   r   r   )r   r   ress      r
   test_wait_on_setzEventTests.test_wait_on_setR  sO      ]__
GGIIoooooor	   c                   K   t          j                    }t          j        |                                          }t          j                                        |j                   |                     t           j                  5  | d {V  d d d            n# 1 swxY w Y   | 	                    |j
                   d S r   )r   r%   rE   r   r(   rN   rO   rP   rQ   r   rR   )r   r   r   s      r
   test_wait_cancelzEventTests.test_wait_cancelY  s      ]__"27799-- "",,T[999w566 	 	JJJJJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	%%%%%s   	BB"Bc                 j  K   t          j                    }|                     |                                           |                                 |                     |                                           |                                 |                     |                                           d S r   )r   r%   r   r   r   r   clear)r   r   s     r
   
test_clearzEventTests.test_clearb  s      ]__%%%
		$$$



%%%%%r	   c                 f  K   t          j                    g }fd}t          j         ||                    }t          j        d           d {V  |                     g |                                                                             |                                                                                                                                  |                     dt          j
                             t          j        d           d {V  |                     dg|           |                     dt          j
                             |                     |                                           |                     |                                           d S )Nc                 j   K                                     d {V r|                     d           dS r4   r   r   s    r
   r:   z.EventTests.test_clear_with_waiters.<locals>.c1p  s:      WWYY !a   4r	   r   r5   )r   r%   rE   r/   rF   r   r   r   r   r^   rR   r   rH   r9   )r   r9   r:   tr   s       @r
   test_clear_with_waitersz"EventTests.test_clear_with_waitersl  s     ]__	 	 	 	 	
 6

++mAV$$$




%%%

C,,---mA!f%%%C,,---!!!

#####r	   N)	r)   ry   rz   r   r   r   r   r   r   r   r	   r
   r|   r|     so        2 2 2#' #' #'J  & & && & &$ $ $ $ $r	   r|   c                   n    e 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 )ConditionTestsc                   K   t          j                    g }fd}fd}fd}t          j         ||                    }t          j         ||                    }t          j         ||                    }t          j        d           d {V  |                     g |           |                                                                |                                                      d {V            	                                 t          j        d           d {V  |                     g |           |                                                                
                                 t          j        d           d {V  |                     dg|           |                                                                	                    d           t          j        d           d {V  |                     dg|           |                                                                
                                 t          j        d           d {V  |                     ddg|           |                                                                
                                 t          j        d           d {V  |                     g d|           |                                                                |                     |                                           |                     |                                           |                     |                                           |                     |                                           |                     |                                           |                     |                                           d S )Nc                    K                                     d {V                                   d {V r|                     d           dS r4   r   r   r7   r9   conds    r
   r:   z$ConditionTests.test_wait.<locals>.c1  `      ,,..       YY[[       !a   4r	   c                    K                                     d {V                                   d {V r|                     d           dS r=   r   r   s    r
   r?   z$ConditionTests.test_wait.<locals>.c2  r   r	   c                    K                                     d {V                                   d {V r|                     d           dS rA   r   r   s    r
   rC   z$ConditionTests.test_wait.<locals>.c3  r   r	   r   r5   r>   rD   )r   r$   rE   r/   rF   r   r   r   r   notifyrG   rH   r9   	r   r9   r:   r?   rC   rI   rJ   rK   r   s	           @r
   r   zConditionTests.test_wait  s      ""	 	 	 	 		 	 	 	 		 	 	 	 	  F,, F,, F,,mAV$$$'''dllnn,,,,,,---mAV$$$&&&mA!f%%%&&&AmA!f%%%&&&mA!Q(((&&&mAF+++&&&		"""		$$$		"""		$$$		"""		$$$$$r	   c                   K   t          j                    }|                                 d {V  t          j        |                                          }t          j                                        |j                   |                     t           j	                  5  | d {V  d d d            n# 1 swxY w Y   | 
                    |j                   |                     |                                           d S r   )r   r$   r   rE   r   r(   rN   rO   rP   rQ   r   rR   r   r   )r   r   r   s      r
   r   zConditionTests.test_wait_cancel  s      ""llnn"499;;// "",,T[999w566 	 	JJJJJJJ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	'''&&&&&    	B55B9<B9c                 b  K   t          j                    }|                                 d {V  |                     |                                           t          j        |                                          }t          j        d           d {V  |                     |                                           |                                 d {V  |                     |                                           |	                                 t          j
                                        |j                   t          j
                                        |j                   	 | d {V  n# t           j        $ r Y nw xY w|                     |                                           d S Nr   )r   r$   r   r   r   rE   r   r/   r   r   r(   rN   rO   rG   rQ   )r   r   	wait_tasks      r
   test_wait_cancel_contestedz)ConditionTests.test_wait_cancel_contested  s      ""llnn&&&'		44	mA''' llnn&&& "",,Y-=>>> "",,T\:::	OOOOOOOO% 	 	 	D	 	&&&&&s   *E3 3FFc                 p  K   dt          j                    fd}t          j         |                      }t          j        d           d {V                                   d {V                                   t          j        d           d {V  |                                 t          j        d           d {V                                   t          j        d           d {V  |                     |	                                           |                                d S )NFc                     K    4 d {V  d                                   d {V  d d d           d {V  d S # 1 d {V swxY w Y   d S NTr   )r   waiteds   r
   wait_on_condzBConditionTests.test_wait_cancel_after_notify.<locals>.wait_on_cond  s       " " " " " " " "iikk!!!!!!!" " " " " " " " " " " " " " " " " " " " " " " " " " " " " "s   <
A	Ar   )
r   r$   rE   r/   r   r   rO   rG   r   r`   )r   r   waiterr   r   s      @@r
   test_wait_cancel_after_notifyz,ConditionTests.test_wait_cancel_after_notify  sV      ""	" 	" 	" 	" 	" 	" $\\^^44mAllnnmAmAmA((**+++r	   c                    K   t          j                    }|                     t                    5  |                                 d {V  d d d            d S # 1 swxY w Y   d S r   )r   r$   rP   rr   r   r   r   s     r
   test_wait_unacquiredz#ConditionTests.test_wait_unacquired  s       ""|,, 	 	))++	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                 X  K   t          j                    dfdg }fd}t          j         ||                    }t          j        d           d {V  |                     g |                                            d {V                                                                    t          j        d           d {V  |                     g |           d                                 d {V                                                                    t          j        d           d {V  |                     dg|           |                     |	                                           |                     |
                                           d S )NFc                       S r   r   )presults   r
   	predicatez/ConditionTests.test_wait_for.<locals>.predicate  s    Nr	   c                    K                                     d {V                                 d {V r)|                     d                                            dS r4   )r   wait_forr7   rG   )r9   r   r   s    r
   r:   z(ConditionTests.test_wait_for.<locals>.c1  sq      ,,..       ]]9-------- a   4r	   r   Tr5   r   r$   rE   r/   rF   r   r   rG   r   rH   r9   )r   r9   r:   r   r   r   r   s       @@@r
   test_wait_forzConditionTests.test_wait_for  s      ""	 	 	 	 	 	 	 	 	 	 	 6

++mAV$$$llnnmAV$$$llnnmA!f%%%!!!

#####r	   c                 6  K   t          j                    }|                    d            d {V }|                     g d|           |                     t
                    5  |                    d            d {V  d d d            d S # 1 swxY w Y   d S )Nc                  
    g dS )NrD   r   r   r	   r
   <lambda>z9ConditionTests.test_wait_for_unacquired.<locals>.<lambda>6  s
    ))) r	   rD   c                      dS )NFr   r   r	   r
   r   z9ConditionTests.test_wait_for_unacquired.<locals>.<lambda>:  s     r	   )r   r$   r   rF   rP   rr   )r   r   r   s      r
   test_wait_for_unacquiredz'ConditionTests.test_wait_for_unacquired2  s       "" MM"3"344444444C(((|,, 	/ 	/--.........	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   $BBBc                 2  K   t          j                    g }fd}fd}fd}t          j         ||                    }t          j         ||                    }t          j         ||                    }t          j        d           d {V  |                     g |                                            d {V                      d                                            t          j        d           d {V  |                     dg|                                            d {V                      d                               d                                            t          j        d           d {V  |                     g d|           |                     |	                                           |                     |
                                           |                     |	                                           |                     |
                                           |                     |	                                           |                     |
                                           d S )Nc                    K                                     d {V                                   d {V r)|                     d                                            dS r4   r   r   r7   rG   r   s    r
   r:   z&ConditionTests.test_notify.<locals>.c1@  m      ,,..       YY[[       a   4r	   c                    K                                     d {V                                   d {V r)|                     d                                            dS r=   r   r   s    r
   r?   z&ConditionTests.test_notify.<locals>.c2G  r   r	   c                    K                                     d {V                                   d {V r)|                     d                                            dS rA   r   r   s    r
   rC   z&ConditionTests.test_notify.<locals>.c3N  r   r	   r   r5   i   rD   r   r   s	           @r
   test_notifyzConditionTests.test_notify<  s      ""	 	 	 	 		 	 	 	 		 	 	 	 	  F,, F,, F,,mAV$$$llnnAmA!f%%%llnnADmAF+++		"""		$$$		"""		$$$		"""		$$$$$r	   c                 >  K   t          j                    g }fd}fd}t          j         ||                    }t          j         ||                    }t          j        d           d {V  |                     g |                                            d {V                                                                    t          j        d           d {V  |                     ddg|           |                     |	                                           |                     |
                                           |                     |	                                           |                     |
                                           d S )Nc                    K                                     d {V                                   d {V r)|                     d                                            dS r4   r   r   s    r
   r:   z*ConditionTests.test_notify_all.<locals>.c1u  r   r	   c                    K                                     d {V                                   d {V r)|                     d                                            dS r=   r   r   s    r
   r?   z*ConditionTests.test_notify_all.<locals>.c2|  r   r	   r   r5   r>   )r   r$   rE   r/   rF   r   
notify_allrG   r   rH   r9   )r   r9   r:   r?   rI   rJ   r   s         @r
   test_notify_allzConditionTests.test_notify_allp  s      ""	 	 	 	 		 	 	 	 	  F,, F,,mAV$$$llnnmA!Q(((		"""		$$$		"""		$$$$$r	   c                 l    t          j                    }|                     t          |j                   d S r   )r   r$   rP   rr   r   r   s     r
   test_notify_unacquiredz%ConditionTests.test_notify_unacquired  s.     "",44444r	   c                 l    t          j                    }|                     t          |j                   d S r   )r   r$   rP   rr   r   r   s     r
   test_notify_all_unacquiredz)ConditionTests.test_notify_all_unacquired  s.     "",88888r	   c                   K   t          j                    }|                     dt          |          v            |                     t                              t          |                               |                                 d {V  |                     dt          |          v            |j                            t          j
                               |                     dt          |          v            |                     t                              t          |                               |j                            t          j
                               |                     dt          |          v            |                     t                              t          |                               d S )Nunlockedr   r   	waiters:2)r   r$   r   r   r   r   r   rR   r7   r   r   r   s     r
   r   zConditionTests.test_repr  sR      ""
d4jj0111tDzz22333llnnDJJ.///TY[[)))tDzz1222tDzz22333TY[[)))tDzz1222tDzz2233333r	   c                 r  K   t          j                    }|                     |                                           |4 d {V  |                     |                                           d d d           d {V  n# 1 d {V swxY w Y   |                     |                                           d S r   )r   r$   r   r   r   r   s     r
   rw   z#ConditionTests.test_context_manager  s!      ""''' 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+OODKKMM***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+'''''rx   c                     K   d fd	} |             d {V   |t          j                               d {V  t          j                    } ||t          j        |                     d {V  d S )Nc                 T  K   | t          j                    } |t          j        |           }                    |j        |                                |                                                                |                                           |4 d {V                      |                                                                |                                           d d d           d {V  n# 1 d {V swxY w Y                       |                                                                |                                           | 4 d {V                      |                                                                |                                           d d d           d {V  n# 1 d {V swxY w Y                       |                                                                |                                           d S r   )r   r   r$   assertIs_lockr   r   r   )r   r   r   s     r
   fz,ConditionTests.test_explicit_lock.<locals>.f  s     ||~~|(..MM$*d+++T[[]]+++T[[]]+++ / / / / / / / /....../ / / / / / / / / / / / / / / / / / / / / / / / / / / T[[]]+++T[[]]+++ / / / / / / / /....../ / / / / / / / / / / / / / / / / / / / / / / / / / / T[[]]+++T[[]]+++++s&    AD
DD(AG		
GG)NN)r   r   r$   )r   r   r   s   `  r
   test_explicit_lockz!ConditionTests.test_explicit_lock  s      	, 	, 	, 	, 	, 	,( acc							a|~~ag'--...........r	   c                     K   t          j                                         j                    fd} fd} |             d {V   |             d {V  d S )Nc                    K                        t                    5  t          j                   d d d            n# 1 swxY w Y   t          j                    } | _        | 4 d {V  t          j        |           }                    t          d          5  |                                 d {V  d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S Nr"   z"is bound to a different event loop)	rP   r   r   r   _loopr$   r   rr   r   r   r   r#   r   s     r
   wrong_loop_in_lockz?ConditionTests.test_ambiguous_loops.<locals>.wrong_loop_in_lock  s      ""9-- ( ($''''( ( ( ( ( ( ( ( ( ( ( ( ( ( (<>>DDJ 
) 
) 
) 
) 
) 
) 
) 
) (.. ++ 8  ) ) ,,..(((((((	) ) ) ) ) ) ) ) ) ) ) ) ) ) )
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
) 
)sG   A  AA-0C"C8C"C	C"C	C""
C,/C,c                    K   t          j                    } | 4 d {V                      t                    5  t          j        |            d d d            n# 1 swxY w Y   t          j        |           }|_                            t          d          5  |                                 d {V  d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S r   )	r   r   rP   r   r$   r   r   rr   r   r   s     r
   wrong_loop_in_condz?ConditionTests.test_ambiguous_loops.<locals>.wrong_loop_in_cond  s     <>>D 	& 	& 	& 	& 	& 	& 	& 	&&&y11 7 7%d66667 7 7 7 7 7 7 7 7 7 7 7 7 7 7(..!
++ 8  & & ))++%%%%%%%	& & & & & & & & & & & & & & &	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&sX   C#AC#A!	!C#$A!	%9C#C9C#C			C#C		C##
C-0C-)r   new_event_loop
addCleanupclose)r   r   r   r#   s   `  @r
   test_ambiguous_loopsz#ConditionTests.test_ambiguous_loops  s      %''
###	) 	) 	) 	) 	) 	)"	& 	& 	& 	& 	& 	& ! """""""""  """""""""""r	   c                 T  K   t          j                    }|4 d {V  |                     t           j                  5  t          j        |                                d           d {V  d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )Ng      ?timeout)r   r$   rP   TimeoutErrorr   r   )r   	conditions     r
   test_timeout_in_blockz$ConditionTests.test_timeout_in_block  s     %''	 	F 	F 	F 	F 	F 	F 	F 	F""7#788 F F&y~~'7'7EEEEEEEEEEF F F F F F F F F F F F F F F	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	Fs4    B/A9-B9A=	=B A=	B
B!$B!N)r)   ry   rz   r   r   r   r   r   r   r   r   r   r   r   r   rw   r   r   r   r   r	   r
   r   r     s       =% =% =%~	' 	' 	'' ' '2     4  
#$ #$ #$J/ / /2% 2% 2%h"% "% "%H5 5 59 9 94 4 4 ( ( (/ / /4$# $# $#LF F F F Fr	   r   c                   b    e 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 )SemaphoreTestsc                 |    t          j        d          }|                     |                                           d S r   )r   r&   r   r   r   sems     r
   test_initial_value_zeroz&SemaphoreTests.test_initial_value_zero  s2    ""

%%%%%r	   c                   K   t          j                    }|                     t          |                              d                     |                     t
                              t          |                               |                                 d {V  |                     t          |                              d                     |                     dt          |          v           |                     t
                              t          |                               |j        t          j
                    |_        |j                            t          j                               |                     dt          |          v            |                     t
                              t          |                               |j                            t          j                               |                     dt          |          v            |                     t
                              t          |                               d S )Nz[unlocked, value:1]>r   waitersr   r   )r   r&   r   r   r   r   r   r   rR   collectionsdequer7   r   r   r   s     r
   r   zSemaphoreTests.test_repr   s     !!S		**+ABBCCCtCyy11222kkmmS		**;77888	c2333tCyy11222<&,..CLDIKK(((tCyy0111tCyy11222DIKK(((tCyy0111tCyy1122222r	   c                 `  K   t          j                    }|                     d|j                   |                     t
          d          5  | d {V  d d d            n# 1 swxY w Y   |                     |                                           |                     d|j                   d S )Nr5   z4object Semaphore can't be used in 'await' expression)r   r&   rF   _valuer   r   r   r   r   s     r
   test_semaphorezSemaphoreTests.test_semaphore  s      !!CJ'''##B
 
 	 	 IIIIIII		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	&&&CJ'''''s   	A!!A%(A%c                 R    |                      t          t          j        d           d S )N)rP   
ValueErrorr   r&   r   s    r
   test_semaphore_valuez#SemaphoreTests.test_semaphore_value"  s#    *g&7<<<<<r	   c                   K   t          j        d          g }|                                                      d {V            |                                                      d {V            |                                                                fd}fd}fd}fd}t          j         ||                    }t          j         ||                    }t          j         ||                    }t          j        d           d {V  |                     dg|           |                                                                |                     dt          j
                             |                     dj                   t          j         ||                    }	                                                                  |                     dj                   t          j        d           d {V  |                     dj                   |                     dt          |                     |                                                                |                     dt          j
                             |                     dj                   |                     |                                           |                     |                                           |||	g}
d	 |
D             }|                     dt          |                                                      t          j        |
  d {V  d S )
NrB   c                 j   K                                     d {V  |                     d           dS r4   r6   r9   r   s    r
   r:   z'SemaphoreTests.test_acquire.<locals>.c1-  >      ++--MM!4r	   c                 j   K                                     d {V  |                     d           dS r=   r6   r  s    r
   r?   z'SemaphoreTests.test_acquire.<locals>.c22  r  r	   c                 j   K                                     d {V  |                     d           dS rA   r6   r  s    r
   rC   z'SemaphoreTests.test_acquire.<locals>.c37  r  r	   c                 j   K                                     d {V  |                     d           dS )N   Tr6   r  s    r
   c4z'SemaphoreTests.test_acquire.<locals>.c4<  r  r	   r   r5   r>   c                 b    g | ],}|                                 |                                *|-S r   )rH   r9   .0r   s     r
   
<listcomp>z/SemaphoreTests.test_acquire.<locals>.<listcomp>[  s2    GGGAqvvxxGAHHJJGaGGGr	   )r   r&   r   r   r   r   rE   r/   rF   r^   rR   r   rG   rH   r9   gather)r   r9   r:   r?   rC   r  rI   rJ   rK   t4
race_tasks
done_tasksr   s               @r
   rL   zSemaphoreTests.test_acquire%  s^     ""ckkmm++++++,,,ckkmm++++++,,,&&&	 	 	 	 	
	 	 	 	 	
	 	 	 	 	
	 	 	 	 	
  F,, F,, F,,mA!f%%%

%%%C--...CJ''' F,,CJ'''mACJ'''CKK(((

%%%C--...CJ'''		"""		$$$"b\
GGGGG
C
OO,,, 	nj))))))))))r	   c                   K   t          j                    }|                                 d {V  t          j        |                                          }t          j                                        |j                   |                     t           j                  5  | d {V  d d d            n# 1 swxY w Y   | 	                    |j
         pt          d |j
        D                                  d S )Nc              3   >   K   | ]}|                                 V  d S r   rH   )r  r   s     r
   	<genexpr>z5SemaphoreTests.test_acquire_cancel.<locals>.<genexpr>k  s*      EEfFKKMMEEEEEEr	   )r   r&   r   rE   r(   rN   rO   rP   rQ   r   rR   all)r   r   r   s      r
   rT   z"SemaphoreTests.test_acquire_cancelb  s6     !!kkmm%ckkmm44 "",,W^<<<w566 	 	MMMMMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	S\) FEEEEEEE	G 	G 	G 	G 	Gr   c                   K   t          j        d          }t          j        |                                          }t          j        |                                          }t          j        |                                          }t          j        |                                          }t          j        d           d {V  |                                 |                                 |                                 t          j        d           d {V  t          j        d           d {V  t          d ||fD                       }|                     |d           | 	                    |
                                           |                     |
                                           |                                 |                                 t          j        d           d {V  d S )Nr   valuec              3   >   K   | ]}|                                 V  d S r   r  r  s     r
   r  zCSemaphoreTests.test_acquire_cancel_before_awoken.<locals>.<genexpr>}  s*      22Aqvvxx222222r	   r5   )r   r&   rE   r   r/   rO   rG   sumrF   r   rH   r   )r   r   rI   rJ   rK   r  num_dones          r
   !test_acquire_cancel_before_awokenz0SemaphoreTests.test_acquire_cancel_before_awokenm  s     a((( // // // //mA
		
		mAmA22"b222221%%%		"""###
		
		mAr	   c                 T  K   t          j        d          }t          j        |                                          }t          j        |                                          }t          j        d           d {V  |                                 |                                 t          j        d           d {V  t          j        d           d {V  |                     |                                           |                     |	                                           d S )Nr   r  )
r   r&   rE   r   r/   rO   rG   r   r   rH   )r   r   rI   rJ   s       r
   test_acquire_hangz SemaphoreTests.test_acquire_hang  s     a((( // //mA
		mAmA

%%%		"""""r	   c                    K   t          j        d          fd} fd}t          j         |                      }t          j         |                      t          j        |d           d {V \  }}                     |d u                                 t          |t           j                             t          j                                        d           d {V  d S )Nr5   c                     K    4 d {V  t          j        d           d {V  d d d           d {V  n# 1 d {V swxY w Y                                    d S r   )r   r/   rO   )r   rJ   s   r
   r:   z/SemaphoreTests.test_acquire_no_hang.<locals>.c1  s       ' ' ' ' ' ' ' 'mA&&&&&&&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 'IIKKKKKs   9
AAc                     K   4 d {V                        d           d d d           d {V  d S # 1 d {V swxY w Y   d S r   )r   r   s   r
   r?   z/SemaphoreTests.test_acquire_no_hang.<locals>.c2  s       ' ' ' ' ' ' ' '  &&&' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '   5
??T)return_exceptionsg      ?r   )	r   r&   rE   r  r   
isinstancerQ   r   r   )r   r:   r?   rI   r1r2r   rJ   s   `     @@r
   test_acquire_no_hangz#SemaphoreTests.test_acquire_no_hang  s     ""	 	 	 	 	 	
	' 	' 	' 	' 	' 	'  && &&~b"EEEEEEEEEBd
###
2w'=>>???s{{}}c::::::::::::r	   c                 l    t          j                    }|                     t          |j                   d S r   )r   r'   rP   r  rG   r   s     r
   rs   z(SemaphoreTests.test_release_not_acquired  s.    &((*ck22222r	   c                 (  K   t          j                    }|                                 d {V  |                     |                                           |                                 |                     |                                           d S r   )r   r&   r   r   r   rG   r   r   s     r
   ru   z&SemaphoreTests.test_release_no_waiters  s}      !!kkmm

%%%&&&&&r	   c                   K   t          j        d          g fd}t          j                    4 d {V }|                     |d                     |                     |d                     |                     |d                     d d d           d {V  n# 1 d {V swxY w Y   |                     g d           d S )Nr5   c                   K                                     d {V                      |  d           t          j        d           d {V                                                                     d {V                      |  d           t          j        d           d {V                                   d S )N_1r.   _2)r   r7   r   r/   rG   )tagr9   r   s    r
   coroz4SemaphoreTests.test_acquire_fifo_order.<locals>.coro  s      ++--MMS***%%%-%%%%%%%%%KKMMM++--MMS***%%%-%%%%%%%%%KKMMMMMr	   r:   r?   rC   )c1_1c2_1c3_1c1_2c2_2c3_2)r   r&   	TaskGrouprE   rF   )r   r3  tgr9   r   s      @@r
   test_acquire_fifo_orderz&SemaphoreTests.test_acquire_fifo_order  sv     ""		 		 		 		 		 		 $&& 	' 	' 	' 	' 	' 	' 	'"NN44::&&&NN44::&&&NN44::&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	'
 	<<<	
 	
 	
 	
 	
s   AB''
B14B1c                   	K   t          j        d          	g }	fd}	fd}	fd}t          j         ||                    }t          j         ||                    }t          j         ||                    }t          j        d           d {V  	                                 	                                 |||g}t          j        |  d {V  |                     g d|           d S )Nr5   c                 j   K                                     d {V  |                     d           dS r4   r6   r  s    r
   r:   z4SemaphoreTests.test_acquire_fifo_order_2.<locals>.c1  r  r	   c                    K                                     d {V  |                     d                                                                              d {V  |                     d           dS )Nr>   r  T)r   r7   rG   r  s    r
   r?   z4SemaphoreTests.test_acquire_fifo_order_2.<locals>.c2  s}      ++--MM!KKMMM++--MM!4r	   c                 j   K                                     d {V  |                     d           dS rA   r6   r  s    r
   rC   z4SemaphoreTests.test_acquire_fifo_order_2.<locals>.c3  r  r	   r   )r5   r>   rB   r  )r   r&   rE   r/   rG   r  rF   
r   r9   r:   r?   rC   rI   rJ   rK   tasksr   s
            @r
   test_acquire_fifo_order_2z(SemaphoreTests.test_acquire_fifo_order_2  s7     ""	 	 	 	 	
	 	 	 	 		 	 	 	 	
  F,, F,, F,,mARne$$$$$$$$v.....r	   c                 L  	K   t          j        d          	g }	fd}	fd}	fd}t          j         ||                    }t          j         ||                    }t          j         ||                    }t          j        d           d {V  |                                 t          j        d           d {V  	                                 	                                 |||g}t          j        |ddi d {V  |                     ddg|           d S )	Nr   c                 j   K                                     d {V  |                     d           dS r4   r6   r  s    r
   r:   z4SemaphoreTests.test_acquire_fifo_order_3.<locals>.c1  r  r	   c                 j   K                                     d {V  |                     d           dS r=   r6   r  s    r
   r?   z4SemaphoreTests.test_acquire_fifo_order_3.<locals>.c2  r  r	   c                 j   K                                     d {V  |                     d           dS rA   r6   r  s    r
   rC   z4SemaphoreTests.test_acquire_fifo_order_3.<locals>.c3  r  r	   r'  Tr>   rB   )r   r&   rE   r/   rO   rG   r  rF   rA  s
            @r
   test_acquire_fifo_order_3z(SemaphoreTests.test_acquire_fifo_order_3  sn     ""	 	 	 	 	
	 	 	 	 	
	 	 	 	 	
  F,, F,, F,,mA
		mARne<t<<<<<<<<<!Q(((((r	   N)r)   ry   rz   r   r   r   r  rL   rT   r   r"  r+  rs   ru   r<  rC  rH  r   r	   r
   r   r     s        & & &3 3 3*( ( (= = =;* ;* ;*z	G 	G 	G  2# # #; ; ;,3 3 3
' ' '
 
 
2!/ !/ !/F") ") ") ") ")r	   r   c                        e Zd Z f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 xZS )BarrierTestsc                 f   K   t                                                       d {V  d| _        d S )N   )super
asyncSetUpN)r   	__class__s    r
   rN  zBarrierTests.asyncSetUp  s:      gg  """""""""r	   c                 >    fdt          |          D             }|S )Nc                 H    g | ]}t          j                               S r   )r   rE   )r  _r3  s     r
   r  z+BarrierTests.make_tasks.<locals>.<listcomp>  s*    ???$TTVV,,???r	   )range)r   nr3  rB  s     ` r
   
make_taskszBarrierTests.make_tasks  s'    ????eAhh???r	   c                 b   K   |                      ||          }t          j        |  d {V }||fS r   )rV  r   r  )r   rU  r3  rB  r   s        r
   gather_taskszBarrierTests.gather_tasks"  sA      4((NE*******Ezr	   c                 >  K   t          j        | j                  }|                     dt	          |                     |                     t          d          5  | d {V  d d d            n# 1 swxY w Y   |                     dt	          |                     d S )Nfillingz2object Barrier can't be used in 'await' expression)r   BarrierrO  assertInr   r   r   r   barriers     r
   test_barrierzBarrierTests.test_barrier'  s      /$&))ig///##@
 
 	 	 MMMMMMM		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	ig/////s   	A//A36A3c                   K   t          j        | j                  }|                     t                              t          |                               |                     dt          |                     g }d }d}t          |          D ]2}|	                    t          j
         ||                               3t          j        d           d {V  |                     t                              t          |                               |                     d| d| j         t          |          v            |                     dt          |                     t          |j        |j        z
            D ]2}|	                    t          j
         ||                               3t          j        d           d {V  |                     t                              t          |                               |                     dt          |                     t          |          D ]2}|	                    t          j
         ||                               3t          j        d           d {V  |                                 d {V  |                     t                              t          |                               |                     dt          |                     t          |          D ]2}|	                    t          j
         ||                               3t          j        d           d {V  |                                 d {V  |                     t                              t          |                               |                     d	t          |                     |                     |j                   t          j        |d
di d {V  d S )NrZ  c                 >   K   |                                   d {V  d S r   r   r^  s    r
   r   z$BarrierTests.test_repr.<locals>.wait9  s,      ,,..         r	   r>   r   zwaiters:/draining	resettingbrokenr'  T)r   r[  rO  r   r   r   r   r\  rT  r7   rE   r/   parties	n_waitingresetabortrf  r  )r   r^  r   r   incris         r
   r   zBarrierTests.test_repr2  s     /$&))tG}}55666ig///	! 	! 	! t 	? 	?ANN7.ttG}}==>>>>mAtG}}556662422$&22d7mmCDDDig/// w)::;; 	? 	?ANN7.ttG}}==>>>>mAtG}}55666j$w--000 t 	? 	?ANN7.ttG}}==>>>>mAmmootG}}55666k4==111 t 	? 	?ANN7.ttG}}==>>>>mAmmootG}}55666hW...''' ng>>>>>>>>>>>>r	   c                    K   |                      t          d            |                      t          d            |                     t          j        | j                  t          j                   d S )Nc                  *    t          j        d          S r   r   r[  r   r	   r
   r   z3BarrierTests.test_barrier_parties.<locals>.<lambda>f  s    goa.@.@ r	   c                  *    t          j        d          S )Nro  r   r	   r
   r   z3BarrierTests.test_barrier_parties.<locals>.<lambda>g  s    gob.A.A r	   )rP   r  assertIsInstancer   r[  rO  r  s    r
   test_barrier_partiesz!BarrierTests.test_barrier_partiese  sd      *&@&@AAA*&A&ABBBgodf55wGGGGGr	   c                   K   d| _         t          j        | j                   g fd}|                     | j         |           d {V  |                     t                    t          t          | j                                        |                     j	        d           | 
                    j                   d S )NrB   c                     K   4 d {V }                      |            d d d           d {V  d S # 1 d {V swxY w Y   d S r   r7   )rl  r^  resultss    r
   r3  z/BarrierTests.test_context_manager.<locals>.corop  s       " " " " " " "!q!!!" " " " " " " " " " " " " " " " " " " " " " " " " " " " " "r&  r   )rO  r   r[  rX  assertListEqualsortedlistrT  rF   rh  r   rf  r   r3  r^  rw  s     @@r
   rw   z!BarrierTests.test_context_managerk  s      /$&))	" 	" 	" 	" 	" 	" ---------VG__d5==.A.ABBB*A...(((((r	   c                    K   t          j        d          fd} |             d {V }|                     |           |                     j        d           |                     j                   d S )Nr5   c                  h   K   4 d {V } 	 d d d           d {V  dS # 1 d {V swxY w Y   d S r   r   )rl  r^  s    r
   r   z-BarrierTests.test_filling_one_task.<locals>.f}  s             !                             s   !
++r   )r   r[  r   rF   rh  r   rf  )r   r   retr^  s      @r
   test_filling_one_taskz"BarrierTests.test_filling_one_taskz  s      /!$$	 	 	 	 	 ACCiiiiii*A...(((((r	   c                   K   t          j        d          }t          j        |                                          }t          j        d           d {V  |                     |j        d           t          j        |                                          }t          j        d           d {V  |                     |                                |                                           |                     |                                |                                           |                     |j        d           | 	                    |j
                   d S Nr5   r   )r   r[  rE   r   r/   rF   rh  r9   rH   r   rf  )r   r^  rI   rJ   s       r
   test_filling_one_task_twicez(BarrierTests.test_filling_one_task_twice  s#     /!$$ 00mA*A... 00mAbiikk222BGGII...*A...(((((r	   c                 f  K   d| _         t          j        | j                   }t          j        |                                          }t          j        d           d {V  |                     |j        d           |                     dt          |                     t          j        |                                          }t          j        d           d {V  |                     |j        d           |                     dt          |                     t          j        |                                          }t          j        d           d {V  t          j        |||g           d {V  |                     |j        d           | 
                    |j                   d S )NrB   r   r5   rZ  r>   )rO  r   r[  rE   r   r/   rF   rh  r\  r   r   rf  )r   r^  rI   rJ   rK   s        r
   test_filling_task_by_taskz&BarrierTests.test_filling_task_by_task  s     /$&)) 00mA*A...ig/// 00mA*A...ig/// 00mAlBB<(((((((((*A...(((((r	   c                 
  K   t          j        | j                  g fd}|                     | j        |           d {V  |                     t                    | j        dz             |                                         d          | j                   |                                         d          | j                   |                     j        d           |                     j	                   d S )Nc                    K    4 d {V                       d            4 d {V                       d           d d d           d {V  n# 1 d {V swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )NTFrv  r^  rw  s   r
   r3  z8BarrierTests.test_filling_tasks_wait_twice.<locals>.coro  s      * * * * * * * *t$$$" * * * * * * * *NN5)))* * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * *s4   A6A A6
A	A6A	 A66
B B r>   TFr   )
r   r[  rO  rX  rF   r^   countrh  r   rf  r{  s     @@r
   test_filling_tasks_wait_twicez*BarrierTests.test_filling_tasks_wait_twice  s     /$&))	* 	* 	* 	* 	* 	* ---------Wtvax000t,,df555u--tv666*A...(((((r	   c                   K   t          j        | j                  g g fd}|                     | j        |           d {V \  }}|                     t                    | j                   |                     t                               |                     t                    | j                   |                     t                               |                     t          |          t          t          | j                                       |                     j        d           |                     j                   d S )Nc                  <  K   4 d {V                       d           4 d {V }                      d           | cd d d           d {V  cd d d           d {V  S # 1 d {V swxY w Y   	 d d d           d {V  d S # 1 d {V swxY w Y   d S r   rv  )rl  r^  results1results2s    r
   r3  z@BarrierTests.test_filling_tasks_check_return_value.<locals>.coro  s             %%%"       aOOD)))                                                                    s4   BA&B&
A0	0B3A0	4B
BBr   )r   r[  rO  rX  rF   r^   r   r  rx  ry  rz  rT  rh  r   rf  )r   r3  r   rS  r^  r  r  s       @@@r
   %test_filling_tasks_check_return_valuez2BarrierTests.test_filling_tasks_check_return_value  sC     /$&))	 	 	 	 	 	 	 ((66666666QX///H&&&X///H&&&VC[[$uTV}}*=*=>>>*A...(((((r	   c                   K   t          j        | j                  g fd}|                     | j        |           d {V  |                     t                    | j                   |                     d         d           |                     t          d | j        dz
                                |                     j        d           | 	                    j
                   d S )Nc                     K    4 d {V                       dt                     v            d d d           d {V  d S # 1 d {V swxY w Y   d S )Nrd  )r7   r   r  s   r
   r3  z.BarrierTests.test_draining_state.<locals>.coro  s       < < < < < < < <zT']]:;;;< < < < < < < < < < < < < < < < < < < < < < < < < < < < < <s   %A
AAr   Fr5   r   )r   r[  rO  rX  rF   r^   r   r  rh  r   rf  r{  s     @@r
   test_draining_statez BarrierTests.test_draining_state  s      /$&))	< 	< 	< 	< 	< 	<
 ---------Wtv...e,,,GITVAXI.//000*A...(((((r	   c                    K   d}t          j        | j                  t          j        | j        |z
            g }|d}fd}|                     | j        |           d {V  d S )Nr>   r   c                     K                                      d {V  dk    r!dz                                     d {V  d S                                   d {V                                     d {V  d S ro   r   )r^  barrier_nowaitingrewait_ns   r
   r3  z=BarrierTests.test_blocking_tasks_while_draining.<locals>.coro  s       ,,..        !||Allnn$$$$$$$$$ (,,.........llnn$$$$$$$$$r	   )r   r[  rO  rX  )r   rewaitrw  counterr3  r^  r  r  s        @@@r
   "test_blocking_tasks_while_drainingz/BarrierTests.test_blocking_tasks_while_draining  s      /$&))#ODFVO<<	% 	% 	% 	% 	% 	% 	%& -----------r	   c                   K   d| _         t          j        | j                   g fd}t          j         |                      }t          j        d           d {V  |                     j        d           t          j         |                      }t          j        d           d {V  |                     j        d           |                                 t          j        d           d {V  |                     j        d           |                     t          j	                  5  | d {V  d d d            n# 1 swxY w Y   | 
                    |                                           t          j         |                      }t          j        d           d {V  |                     j        d           t          j         |                      }t          j        |||           d {V  |                     t                    | j                    | 
                    t                               |                     j        d           |                     j                   d S )NrB   c                  j   K                                      d {V                      d           d S r   r   r  s   r
   r3  z8BarrierTests.test_filling_tasks_cancel_one.<locals>.coro  s?      ,,..       NN4     r	   r   r5   r>   )rO  r   r[  rE   r/   rF   rh  rO   rP   rQ   r   r`   r  r^   r  r   rf  )r   r3  rI   rJ   rK   r  r^  rw  s         @@r
   test_filling_tasks_cancel_onez*BarrierTests.test_filling_tasks_cancel_one  s     /$&))	! 	! 	! 	! 	! 	!  ((mA*A... ((mA*A...
		mA*A...w566 	 	HHHHHHH	 	 	 	 	 	 	 	 	 	 	 	 	 	 	''' ((mA*A... ((nRR(((((((((Wtv...G%%%*A...(((((s   7	EEEc                   K   t          j        d          }t          j        |                                           t          j        d           d {V  |                     |j        d           |                     |j                   d S r  )	r   r[  rE   ri  r/   rF   rh  r   rf  r]  s     r
   test_reset_barrierzBarrierTests.test_reset_barrier-  s      /!$$GMMOO,,,mA*A...(((((r	   c                 t  K   t          j        | j                  g fd}fd}|                     | j        dz
  |          }t          j        d           d {V  t          j         |                       t          j        |  d {V  |                     t                    | j        dz
             | 	                    t                               |                     j        d           |                     dt                               |                     j                   d S )Nc                     K   	                                    d {V  d S # t          j        $ r                     d           Y d S w xY wr   r   r   BrokenBarrierErrorr7   r  s   r
   r3  zABarrierTests.test_reset_barrier_while_tasks_waiting.<locals>.coro:  sk      %llnn$$$$$$$$$- % % %t$$$$$$%s   ! $A	A	c                  @   K                                      d {V  d S r   )ri  rb  s   r
   
coro_resetzGBarrierTests.test_reset_barrier_while_tasks_waiting.<locals>.coro_reset@  s-      --//!!!!!!!!!r	   r5   r   re  )r   r[  rO  rV  r/   rE   r  rF   r^   r   r  rh  assertNotInr   r   rf  )r   r3  r  rB  r^  rw  s       @@r
   &test_reset_barrier_while_tasks_waitingz3BarrierTests.test_reset_barrier_while_tasks_waiting6  sU     /$&))	% 	% 	% 	% 	% 	%	" 	" 	" 	" 	" 400mA 	JJLL)))ne$$$$$$$$Wtvax000G%%%*A...d7mm444(((((r	   c                   K   t          j        | j                  g | j        dz  fd}|                     | j        |           d {V  |                     dgz             |                     j        d           |                     dt                               |                     j	                   d S )Nr>   c                     K   	                                    d {V   j        k    r                                  d {V  d S d S # t          j        $ r                     d           Y d S w xY wr   )r   _countri  r   r  r7   )r^  rest_of_tasksr  s   r
   r3  zFBarrierTests.test_reset_barrier_when_tasks_half_draining.<locals>.coroV  s      	*llnn$$$$$$$ !GN22!--//))))))))) 32 - & & &%%%%%%&s   A $A0/A0Tr   re  
r   r[  rO  rX  rF   rh  r  r   r   rf  )r   r3  r^  r  r  s     @@@r
   +test_reset_barrier_when_tasks_half_drainingz8BarrierTests.test_reset_barrier_when_tasks_half_drainingQ  s      /$&))	
	* 
	* 
	* 
	* 
	* 
	* 
	* ---------D6-#7888*A...d7mm444(((((r	   c                   K   t          j        | j                  g g | j        dz  dfd}|                     | j        |           d {V  |                     dgz             |                     g            |                     j        d           |                     dt                               |                     j	                   d S )Nr>   r   c                    K   	                                    d {V  dz  k    r6                                  d {V                                     d {V  d S 	                                    d {V  d S # t          j        $ r                     d           Y d S w xY w# t          j        $ r3                     d                                              d {V  Y d S w xY wr4   )r   ri  r   r  r7   r^  blocking_tasksr  r  r  s   r
   r3  zTBarrierTests.test_reset_barrier_when_tasks_half_draining_half_blocking.<locals>.corop  sK     .llnn$$$$$$$ 
>))!--//))))))) ",,..(((((((((.%llnn,,,,,,,,,"5 . . . ------.# - % % %%%% llnn$$$$$$$$$$%s#   B( !A= =$B%$B%(>C*)C*Tre  r  r   r3  r^  r  r  r  r  s     @@@@@r
   9test_reset_barrier_when_tasks_half_draining_half_blockingzFBarrierTests.test_reset_barrier_when_tasks_half_draining_half_blockingi  s     /$&))	. 	. 	. 	. 	. 	. 	. 	. 	.2 ---------D6.#89992&&&*A...d7mm444(((((r	   c                   K   t          j        | j                  g g fd}fd}|                     | j        dz
  |          }t          j                                                   t          j        d           d {V  t          j         |                       t          j        |  d {V  |                     j	                   | 
                    t                    | j        dz
             |                     t                               | 
                    t                    | j                   |                     t                               | 
                    j        d           d S )Nc                  ^  K   	                                    d {V  n*# t          j        $ r                     d           Y nw xY w                                   d {V                      d           d S #                                    d {V                      d           w xY wr   r  )r^  r  r  s   r
   coro1zTBarrierTests.test_reset_barrier_while_tasks_waiting_and_waiting_again.<locals>.coro1  s      &llnn$$$$$$$$- & & &%%%%%& llnn$$$$$$$%%%%% llnn$$$$$$$%%%%s&     A; $AA; AA; ;1B,c                     K    4 d {V                       d           d d d           d {V  d S # 1 d {V swxY w Y   d S r   rv  )r^  r  s   r
   coro2zTBarrierTests.test_reset_barrier_while_tasks_waiting_and_waiting_again.<locals>.coro2  s       & & & & & & & &%%%& & & & & & & & & & & & & & & & & & & & & & & & & & & & & &r&  r5   r   )r   r[  rO  rV  rE   ri  r/   r  r   rf  rF   r^   r   r  rh  )r   r  r  rB  r^  r  r  s       @@@r
   8test_reset_barrier_while_tasks_waiting_and_waiting_againzEBarrierTests.test_reset_barrier_while_tasks_waiting_and_waiting_again  s     /$&))	& 	& 	& 	& 	& 	& 	&	& 	& 	& 	& 	& 	& q%00 	GMMOO,,,mA 	EEGG$$$ne$$$$$$$$(((Xq111H&&&X///H&&&*A.....r	   c                    K   t          j         j                  g g g d fd}                      j        |           d {V                       j                                        t                                                    t                     j        dz
                                  t                    d                                t                     j                                        t                                                    j
        d           d S )Nr   c                    K                                     d {V } dz  j        k    r5                                 d {V                                    d {V  n]	                                   d {V                      d           n,# t          $ r}                    d           Y d }~nd }~ww xY w                                  d {V }                    d           d S r4   )r   rO  ri  r7   	Exception)	rl  ekr^  r  r  r  results3r   s	      r
   r3  zBBarrierTests.test_reset_barrier_while_tasks_draining.<locals>.coro  s6      llnn$$$$$$AQJEmmoo%%%%%%% llnn$$$$$$$$*!,,..((((((( OOD))))  * * *OOD))))))))* llnn$$$$$$AOOD!!!!!s   $/B 
B=B88B=r5   )r   r[  rO  rX  r   rf  r   r  rF   r^   rh  )r   r3  r^  r  r  r  r  s   ` @@@@@r
   'test_reset_barrier_while_tasks_drainingz4BarrierTests.test_reset_barrier_while_tasks_draining  sP     /$&))	" 	" 	" 	" 	" 	" 	" 	" 	" 	"6 ---------(((H&&&Xq111X***X///H&&&*A.....r	   c                   K   t          j        d          }t          j        |                                           t          j        d           d {V  |                     |j        d           |                     |j                   d S r  )	r   r[  rE   rj  r/   rF   rh  r   rf  r]  s     r
   test_abort_barrierzBarrierTests.test_abort_barrier  s      /!$$GMMOO,,,mA*A...'''''r	   c                   K   t          j        | j                  g g | j        dz  dfd}|                     | j        |           d {V  |                     j                   |                     dgz             |                     dg| j        z
  dz
  z             |                     j        d           |                     dt                               d S )Nr>   r   c                  r  K   	                                    d {V  dz  k    r                                  d {V  d S 	                                    d {V  d S # t          j        $ r                     d           Y d S w xY w# t          j        $ r                     d           Y d S w xY wr4   )r   rj  r   r  r7   r  s   r
   r3  zTBarrierTests.test_abort_barrier_when_tasks_half_draining_half_blocking.<locals>.coro  s     .llnn$$$$$$$
 
>))!--//))))))))).%llnn,,,,,,,,,"5 . . . ------. - & & &%%%%%%&s#   B A# #$B
B$B65B6Tr5   re  )
r   r[  rO  rX  r   rf  rF   rh  r  r   r  s     @@@@@r
   9test_abort_barrier_when_tasks_half_draining_half_blockingzFBarrierTests.test_abort_barrier_when_tasks_half_draining_half_blocking  s$     /$&))	. 	. 	. 	. 	. 	. 	. 	. 	.& ---------'''D6.#8999D646.+@+B#CDDD*A...d7mm44444r	   c                    K   t          j         j                  g g  fd}                      j        |           d {V                       j                                        t                    d                                t                     j        dz
                                  t                                                    j	        d           d S )Nc                    K   	 4 d {V } | j         dz  k    rt          	 d d d           d {V  n# 1 d {V swxY w Y   4 d {V                      d           d d d           d {V  d S # 1 d {V swxY w Y   d S # t          j        $ r                     d           Y d S t          $ r                                  d {V  Y d S w xY wr=   )rO  rr   r7   r   r  rj  )rl  r^  r  r  r   s    r
   r3  z<BarrierTests.test_abort_barrier_when_exception.<locals>.coro  s"     	&" + + + + + + +aDFAI~~***+ + + + + + + + + + + + + + + + + + + + + + + + + + + # * * * * * * * *OOD)))* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *- & & &%%%%%% & & &mmoo%%%%%%%%%%&s[   B 6B 
A  B A B A8%B 8
BB BB $C2#CCr   r5   )
r   r[  rO  rX  r   rf  rF   r^   r  rh  )r   r3  r^  r  r  s   ` @@@r
   !test_abort_barrier_when_exceptionz.BarrierTests.test_abort_barrier_when_exception  s     /$&))
	& 
	& 
	& 
	& 
	& 
	& 
	& 
	& ---------'''X***Xq111H&&&*A.....r	   c                    K   t          j         j                  t          j         j                  g g g  fd}                      j        |           d {V                       j                                        t                    d                                t                     j        dz
                                  t                                                    t                     j                                        t                                                    j
        d           d S )Nc                    K   	                                   d {V } | j        dz  k    rt                                            d {V                      d           nO# t          j        $ r                     d           Y n)t          $ r                                  d {V  Y nw xY w                                  d {V } | j        dz  k    r                                 d {V                                    d {V                                    d {V                      d           d S r=   )r   rO  rr   r7   r   r  rj  ri  )rl  barrier1barrier2r  r  r  r   s    r
   r3  zKBarrierTests.test_abort_barrier_when_exception_then_resetting.<locals>.coro1  s     	'"--//))))))	>>&&mmoo%%%%%%%%%%%- & & &%%%%% ' ' 'nn&&&&&&&&&&&' mmoo%%%%%%ATVQYnn&&&&&&&&&--//!!!!!!!--//!!!!!!!OOD!!!!!s   AA$ $$B0
#B0/B0r   r5   )r   r[  rO  rX  r   rf  rF   r^   r   r  rh  )r   r3  r  r  r  r  r  s   ` @@@@@r
   0test_abort_barrier_when_exception_then_resettingz=BarrierTests.test_abort_barrier_when_exception_then_resetting)  s\     ?46**?46**	" 	" 	" 	" 	" 	" 	" 	" 	" 	", ---------)))X***Xq111H&&&X///H&&&+Q/////r	   )r)   ry   rz   rN  rV  rX  r_  r   rs  rw   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  __classcell__)rP  s   @r
   rJ  rJ    s               
	0 	0 	01? 1? 1?fH H H) ) )) ) )) ) ) ) ) ),) ) )() ) )0) ) )$. . .:#) #) #)J) ) )) ) )6) ) )0&) &) &)P#/ #/ #/L+/ +/ +/Z( ( ( 5  5  5D/ / /4'0 '0 '0 '0 '0 '0 '0r	   rJ  __main__)__doc__unittestr   rer   r   STR_RGX_REPRcompiler   r   IsolatedAsyncioTestCaser   r|   r   r   rJ  r)   mainr   r	   r
   <module>r     s            				       2:l##( ( (@( @( @( @( @(0 @( @( @(Fi$ i$ i$ i$ i$1 i$ i$ i$XnF nF nF nF nFX5 nF nF nFb[) [) [) [) [)X5 [) [) [)|x0 x0 x0 x0 x083 x0 x0 x0v zHMOOOOO r	   