
    daf                     b   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"                          yy)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        y N)asyncioset_event_loop_policy     7/root/Python-3.12.4/Lib/test/test_asyncio/test_locks.pytearDownModuler      s    !!$'r	   c                   T    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y)	LockTestsc                   K   t        j                         }| j                  t        |      j	                  d             | j                  t
        j                  t        |                   |j                          d {    | j                  t        |      j	                  d             | j                  t
        j                  t        |                   y 7 [w)Nz[unlocked]>	[locked]>)r   Lock
assertTruereprendswithRGX_REPRmatchacquireselflocks     r
   	test_reprzLockTests.test_repr   s     ||~T
++M:;tDz23llnT
++K89tDz23 	s   A>C CACc                    K   t        j                         }| j                  t        d      5  | d {    d d d        | j	                  |j                                y 7 ,# 1 sw Y   +xY ww)Nz/object Lock can't be used in 'await' expression)r   r   assertRaisesRegex	TypeErrorassertFalselockedr   s     r
   	test_lockzLockTests.test_lock%   s^     ||~##=
 	 JJ		 	' 		 	s+   +A.A"A A"(A. A""A+'A.c                 ^  K   t         j                  t         j                  t         j                  t         j                  t         j
                  g}t        j                         }|D ]7  }| j                  t        |j                   d      5   ||       d d d        9 y # 1 sw Y   DxY ww)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     LLMM$$
 '')! 	C''LL> "+ , 
  	 s   B
B-
B!B-!B*	&B-c                 
  K   t        j                         t        j                         t        j                         t        j                         g}|D ]  }t        j
                  d       d {    | j                  |j                                | j                  t        d      5  | d {   5  	 d d d        d d d        | j                  |j                                 y 7 x7 :# 1 sw Y   7xY w# 1 sw Y   ;xY ww)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     LLN$$&	

  		,D--%%%T[[]+''A   Z 	 T[[]+		,%    	 sT   A,D.C'/9D(C7.C)/C73C+5C7=+D)C7+C40C77D 	<Dc                    K   t        j                         g }| j                  j                          d {          fd}fd}fd}t        j                   ||            }t        j                   ||            }t        j
                  d       d {    | j                  g |       j                          t        j
                  d       d {    | j                  dg|       t        j
                  d       d {    | j                  dg|       t        j                   ||            }j                          t        j
                  d       d {    | j                  ddg|       j                          t        j
                  d       d {    | j                  g d|       | j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                y 7 E7 7 7 y7 !7 w)Nc                 d   K   j                          d {   r| j                  d       y7 wN   Tr   appendresultr   s    r
   c1z"LockTests.test_acquire.<locals>.c1\   *     \\^##a  $   0.0c                 d   K   j                          d {   r| j                  d       y7 wN   Tr6   r8   s    r
   c2z"LockTests.test_acquire.<locals>.c2a   r;   r<   c                 d   K   j                          d {   r| j                  d       y7 wN   Tr6   r8   s    r
   c3z"LockTests.test_acquire.<locals>.c3f   r;   r<   r   r5   r?   r5   r?   rC   )
r   r   r   r   create_taskr/   assertEqualreleasedoner9   )	r   r9   r:   r@   rD   t1t2t3r   s	           @r
   test_acquirezLockTests.test_acquireV   s    ||~dlln,-	
	
	
   F,  F,mmAV$mmA!f%mmA!f%  F,mmA!Q(mmAF+	"		$	"		$	"		$[ -( 	 	 	 	 	sm   5JI=A%JJ >JJ/JJAJ(J	)A J)J*CJ JJJ	JJc                   K   t        j                         }| j                  |j                          d {          t        j                  |j                               }t        j
                         j                  |j                         | j                  t         j                        5  | d {    d d d        | j                  |j                         y 7 7 *# 1 sw Y   )xY wwr   )r   r   r   r   rF   r(   	call_sooncancelassertRaisesCancelledErrorr   _waiters)r   r   tasks      r
   test_acquire_cancelzLockTests.test_acquire_cancel   s     ||~dlln,-""4<<>2  ",,T[[9w556 	JJ	' -
 	 	s:   3C,CA7C,-C 3C4C 8%C,C  C)%C,c                 h  K   t        j                         fd}t        j                         j                         }t        j                   |d|            }t        j
                  d       d {    | j                  j                                t        j                   |dd             }t        j
                  d       d {    | j                  t        j                        d       t        j                   |dd             }t        j
                  d       d {    | j                  t        j                        d       |j                  d        |j                          | j                  j                  d   j                                t        j
                  d       d {    | j                  j                                | j                  |j                                | j                  |j                                | d {    y 7 7 ]7 7 u7 w)Nc                    K   j                          d {    	 |
| d {    j                          y 7 "7 # j                          w xY wwr   )r   rH   )nameblockerr   s     r
   lockitz*LockTests.test_cancel_race.<locals>.lockit   sF     ,,.  &!MM ! "s.   A:A> <> A> AAAr   Br5   Cr?   )r   r   r(   create_futurerF   r/   r   r   rG   lenrS   
set_resultrP   	cancelledr   rI   )r   rZ   fatatbtcr   s         @r
   test_cancel_racezLockTests.test_cancel_race   s     ||~	 %%'557  R1mmA&  T!23mmAT]]+Q/  T!23mmAT]]+Q/ 	d
		a(2245mmA'	"'% 	 	 	 	 	s^   A0H23H%4AH2H(AH2)H+*BH28H.9A&H2H0 H2(H2+H2.H20H2c                 ~  	K   t        j                         }t        j                         ddfd}	fd}j                          d {    t        j                   |             	t        j                   |             }t        j                   |             }t        j
                  d       d {    |j                  |       | j                  t         j                        5  	 d {    d d d        | j                  d       | j                  d       | j                  	j                         xr |j                                |j                          t        j
                  d       d {    | j                  |j                                y 7 U7 7 # 1 sw Y   xY w7 7w)Nr   c                  V   K    dz   j                          d {    dz  y 7 
wNr5   )r   )
call_countr   
lock_counts   r
   rZ   z2LockTests.test_cancel_release_race.<locals>.lockit   s/      !OJ,,.  !OJ !s   )')c                  F    j                           j                          y r   )rP   rH   )r   rJ   s   r
   triggerz3LockTests.test_cancel_release_race.<locals>.trigger   s    IIKLLNr	   r5   rC   )r   r(   r   r   rF   r/   rO   rQ   rR   rG   r   ra   rI   rP   )
r   r#   rZ   rm   rK   rL   rj   r   rk   rJ   s
         @@@@r
   test_cancel_release_racez"LockTests.test_cancel_release_race   sR     '')||~

		 lln  *  *  * mmAww556 	HH	
 	Q'Q'427795 			mmA'/ 	 	
 	 	 	s\   AF=F(A*F=>F+?4F=3F/9F-:F/>BF=F;%F=+F=-F//F84F=c                   K   t        j                         }|j                          d {    | j                  |j	                                t        j
                  |j                               }t        j                  d       d {    | j                  t        |j                        d       t        j
                  |j                               }|j                          |j                          t        j                  d       d {    | j                  |j	                                | j                  |j                                | d {    y 7 27 7 R7 wNr   r5   )r   r   r   r   r   rF   r/   rG   r_   rS   rP   rH   ra   )r   r   rd   re   s       r
   test_finished_waiter_cancelledz(LockTests.test_finished_waiter_cancelled   s     ||~lln&  0mmAT]]+Q/   0
		mmA&' % 	 	 	 	sH   (E%EAE%	E
BE%E!AE%E#E%E%!E%#E%c                 t   K   t        j                         }| j                  t        |j                         y wr   )r   r   rQ   RuntimeErrorrH   r   s     r
   test_release_not_acquiredz#LockTests.test_release_not_acquired  s%     ||~,5s   68c                   K   t        j                         }|j                          d {    | j                  |j	                                |j                          | j                  |j	                                y 7 Swr   )r   r   r   r   r   rH   r   r   s     r
   test_release_no_waitersz!LockTests.test_release_no_waiters  sT     ||~lln&'	 	   (B A>AB c                 V  K   t        j                         }| j                  |j                                |4 d {    | j	                  |j                                d d d       d {    | j                  |j                                y 7 S7 &# 1 d {  7  sw Y   6xY wwr   )r   r   r   r   r   r   s     r
   test_context_managerzLockTests.test_context_manager  s     ||~' 	+ 	+OODKKM*	+ 	+ 	'	+ 	+ 	+ 	+ 	+E   :B)BB)  B B)+B,%B)B)B&BB&"B)N)r)   
__module____qualname__r   r    r,   r1   rM   rU   rf   rn   rq   rt   rv   ry   r   r	   r
   r   r      sA    4	(&,&1%f(-^+(Z.6
((r	   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)
EventTestsc                    t        j                         }| j                  t        |      j	                  d             t
        j                  t        |            }| j                  |j                  d      d       |j                          | j                  t        |      j	                  d             | j                  t
        j                  t        |                   |j                  j                  t        j                                | j                  dt        |      v        | j                  t
        j                  t        |                   y )Nz[unset]>extrasunsetz[set]>	waiters:1)r   r%   r   r   r   r   r   rG   groupsetrS   r7   r   Mock)r   evr   s      r
   r   zEventTests.test_repr  s    ]]_R))*56tBx(X.8
R))(34tBx01
499;'tBx/0tBx01r	   c                   K   t        j                         | j                  j                                g }fd}fd}fd}t        j                   ||            }t        j                   ||            }t        j
                  d       d {    | j                  g |       t        j                   ||            }j                          t        j
                  d       d {    | j                  g d|       | j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                y 7 .7 ֭w)Nc                 f   K   j                          d {   r| j                  d       y y 7 wri   waitr7   r9   r   s    r
   r:   z EventTests.test_wait.<locals>.c13  %     WWYa     1/1c                 f   K   j                          d {   r| j                  d       y y 7 w)Nr?   r   r   s    r
   r@   z EventTests.test_wait.<locals>.c27  r   r   c                 f   K   j                          d {   r| j                  d       y y 7 w)NrC   r   r   s    r
   rD   z EventTests.test_wait.<locals>.c3;  r   r   r   )rC   r5   r?   )r   r%   r   is_setrF   r/   rG   r   r   rI   assertIsNoner9   )	r   r9   r:   r@   rD   rJ   rK   rL   r   s	           @r
   	test_waitzEventTests.test_wait-  sB    ]]_%	!	!	!   F,  F,mmAV$  F,
mmAF+	""))+&	""))+&	""))+& 	 	s&   BG	GAG	0G1CG	G	c                    K   t        j                         }|j                          |j                          d {   }| j	                  |       y 7 wr   )r   r%   r   r   r   )r   r   ress      r
   test_wait_on_setzEventTests.test_wait_on_setR  s8     ]]_
GGIo s   8AAAc                   K   t        j                         }t        j                  |j                               }t        j                         j                  |j                         | j                  t         j                        5  | d {    d d d        | j                  |j                         y 7 (# 1 sw Y   'xY wwr   )r   r%   rF   r   r(   rO   rP   rQ   rR   r   rS   )r   r   r   s      r
   test_wait_cancelzEventTests.test_wait_cancelY  s     ]]_""2779-  ",,T[[9w556 	JJ	% 	 	s0   BCB7B5B7$C5B77C <Cc                 .  K   t        j                         }| j                  |j                                |j	                          | j                  |j                                |j                          | j                  |j                                y wr   )r   r%   r   r   r   r   clear)r   r   s     r
   
test_clearzEventTests.test_clearb  s]     ]]_%
		$

%s   BBc                   K   t        j                         g }fd}t        j                   ||            }t        j                  d       d {    | j	                  g |       j                          j                          | j                  j                                j                          j                          | j	                  dt        j                               t        j                  d       d {    | j	                  dg|       | j	                  dt        j                               | j                  |j                                | j                  |j                                y 7 /7 ~w)Nc                 d   K   j                          d {   r| j                  d       y7 wr4   r   r   s    r
   r:   z.EventTests.test_clear_with_waiters.<locals>.c1p  s(     WWYa  r<   r   r5   )r   r%   rF   r/   rG   r   r   r   r   r_   rS   r   rI   r9   )r   r9   r:   tr   s       @r
   test_clear_with_waitersz"EventTests.test_clear_with_waitersl  s    ]]_	
 6
+mmAV$


%

C,-mmA!f%C,-!
#! 	 	s&   AFFB2FFA<FFN)	r)   r{   r|   r   r   r   r   r   r   r   r	   r
   r~   r~     s!    2#'J&&$r	   r~   c                   l    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y)ConditionTestsc                 <  K   t        j                         g }fd}fd}fd}t        j                   ||            }t        j                   ||            }t        j                   ||            }t        j                  d       d {    | j	                  g |       | j                  j                                | j                  j                          d {          j                          t        j                  d       d {    | j	                  g |       | j                  j                                j                          t        j                  d       d {    | j	                  dg|       | j                  j                                j                  d       t        j                  d       d {    | j	                  dg|       | j                  j                                j                          t        j                  d       d {    | j	                  ddg|       | j                  j                                j                          t        j                  d       d {    | j	                  g d|       | j                  j                                | j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                y 7 7 7 v7 7 7 b7 w)Nc                    K   j                          d {    j                          d {   r| j                  d       y7 .7 wr4   r   r   r7   r9   conds    r
   r:   z$ConditionTests.test_wait.<locals>.c1  =     ,,.  YY[  a  !    A
AA
AA
A
c                    K   j                          d {    j                          d {   r| j                  d       y7 .7 wr>   r   r   s    r
   r@   z$ConditionTests.test_wait.<locals>.c2  r   r   c                    K   j                          d {    j                          d {   r| j                  d       y7 .7 wrB   r   r   s    r
   rD   z$ConditionTests.test_wait.<locals>.c3  r   r   r   r5   r?   rE   )r   r$   rF   r/   rG   r   r   r   r   notifyrH   rI   r9   	r   r9   r:   r@   rD   rJ   rK   rL   r   s	           @r
   r   zConditionTests.test_wait  s      "			   F,  F,  F,mmAV$'dlln,-mmAV$&mmA!f%&AmmA!f%&mmA!Q(&mmAF+&	"		$	"		$	"		$G 	 -
 	
 	
 	
 	s   BNNAN&N
'0NNAN5N6ANNAN4N5ANNC3N
NNNNNNc                   K   t        j                         }|j                          d {    t        j                  |j	                               }t        j
                         j                  |j                         | j                  t         j                        5  | d {    d d d        | j                  |j                         | j                  |j                                y 7 7 I# 1 sw Y   HxY wwr   )r   r$   r   rF   r   r(   rO   rP   rQ   rR   r   rS   r   r   )r   r   r   s      r
   r   zConditionTests.test_wait_cancel  s       "lln""499;/  ",,T[[9w556 	JJ	'& 	
 	 	;   (C<C,A3C<C0$C.%C0)AC<.C00C95C<c                 :  K   t        j                         }|j                          d {    | j                  |j	                                t        j
                  |j                               }t        j                  d       d {    | j                  |j	                                |j                          d {    | j                  |j	                                |j                          t        j                         j                  |j                         t        j                         j                  |j                         	 | d {    | j                  |j	                                y 7 O7 7 7 +# t         j                  $ r Y >w xY wwNr   )r   r$   r   r   r   rF   r   r/   r   r   r(   rO   rP   rH   rR   )r   r   	wait_tasks      r
   test_wait_cancel_contestedz)ConditionTests.test_wait_cancel_contested  s#      "lln&''		4	mmA' lln&  ",,Y-=-=>  ",,T\\:	OO
 	&) 	 	 	 %% 		sk   (FE9AF	E<
6F E>BFF F F !F<F>F F FFFFc                 h  K   dt        j                         fd}t        j                   |             }t        j                  d       d {    j	                          d {    j                          t        j                  d       d {    |j                          t        j                  d       d {    j                          t        j                  d       d {    | j                  |j                                | j                         y 7 7 7 7 h7 =w)NFc                     K    4 d {    d j                          d {    d d d       d {    y 7 /7 7 	# 1 d {  7  sw Y   y xY wwNTr   )r   waiteds   r
   wait_on_condzBConditionTests.test_wait_cancel_after_notify.<locals>.wait_on_cond  sQ      " "iik!!" " "!" " " "sL   A:AA <A A>AA A AA	AAr   )
r   r$   rF   r/   r   r   rP   rH   r   ra   )r   r   waiterr   r   s      @@r
   test_wait_cancel_after_notifyz,ConditionTests.test_wait_cancel_after_notify  s       "	" $$\^4mmAllnmmAmmAmmA((*+ 	sZ   AD2D(D2+D*,,D2D,,D2D.,D22D036D2*D2,D2.D20D2c                    K   t        j                         }| j                  t              5  |j	                          d {    d d d        y 7 # 1 sw Y   y xY wwr   )r   r$   rQ   rs   r   r   r   s     r
   test_wait_unacquiredz#ConditionTests.test_wait_unacquired  sN       "|, 	))+	 		 	s.   *AA AA	AAAAc                    K   t        j                         dfdg }fd}t        j                   ||            }t        j                  d       d {    | j	                  g |       j                          d {    j                          j                          t        j                  d       d {    | j	                  g |       dj                          d {    j                          j                          t        j                  d       d {    | j	                  dg|       | j                  |j                                | j                  |j                                y 7 '7 7 7 7 _w)NFc                       S r   r   )presults   r
   	predicatez/ConditionTests.test_wait_for.<locals>.predicate  s    Nr	   c                    K   j                          d {    j                         d {   r!| j                  d       j                          y7 ?7 (wr4   )r   wait_forr7   rH   )r9   r   r   s    r
   r:   z(ConditionTests.test_wait_for.<locals>.c1  sI     ,,.  ]]9---a 	 !-s   AAAA'AAr   Tr5   r   r$   rF   r/   rG   r   r   rH   r   rI   r9   )r   r9   r:   r   r   r   r   s       @@@r
   test_wait_forzConditionTests.test_wait_for  s1      "	 	 6
+mmAV$llnmmAV$llnmmA!f%!
## 	 	 	 	 	s[   AFF)FF<FF+F/F
0<F,F-AFFF
FFc                    K   t        j                         }|j                  d        d {   }| j                  g d|       | j	                  t
              5  |j                  d        d {    d d d        y 7 Q7 # 1 sw Y   y xY ww)Nc                  
    g dS )NrE   r   r   r	   r
   <lambda>z9ConditionTests.test_wait_for_unacquired.<locals>.<lambda>6  s    ) r	   rE   c                       y)NFr   r   r	   r
   r   z9ConditionTests.test_wait_for_unacquired.<locals>.<lambda>:  s    r	   )r   r$   r   rG   rQ   rs   )r   r   r   s      r
   test_wait_for_unacquiredz'ConditionTests.test_wait_for_unacquired2  s}       " MM"344C(|, 	/--...	/ 	/ 5 /	/ 	/s9   *BA>-BB0B 1B5
B BBBc                   K   t        j                         g }fd}fd}fd}t        j                   ||            }t        j                   ||            }t        j                   ||            }t        j                  d       d {    | j	                  g |       j                          d {    j                  d       j                          t        j                  d       d {    | j	                  dg|       j                          d {    j                  d       j                  d       j                          t        j                  d       d {    | j	                  g d|       | j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                y 7 7 7 T7 ,7 ߭w)Nc                    K   j                          d {    j                          d {   r!| j                  d       j                          y7 >7 (wr4   r   r   r7   rH   r   s    r
   r:   z&ConditionTests.test_notify.<locals>.c1@  F     ,,.  YY[  a 	 !    AAAA'AAc                    K   j                          d {    j                          d {   r!| j                  d       j                          y7 >7 (wr>   r   r   s    r
   r@   z&ConditionTests.test_notify.<locals>.c2G  r   r   c                    K   j                          d {    j                          d {   r!| j                  d       j                          y7 >7 (wrB   r   r   s    r
   rD   z&ConditionTests.test_notify.<locals>.c3N  r   r   r   r5   i   rE   r   r   s	           @r
   test_notifyzConditionTests.test_notify<  s      "			   F,  F,  F,mmAV$llnAmmA!f%llnADmmAF+	"		$	"		$	"		$+ 	 	 	 	 	s\   BII)I<I==I:I;*I%I&AI4I5CIIIIIc                   K   t        j                         g }fd}fd}t        j                   ||            }t        j                   ||            }t        j                  d       d {    | j	                  g |       j                          d {    j                          j                          t        j                  d       d {    | j	                  ddg|       | j                  |j                                | j                  |j                                | j                  |j                                | j                  |j                                y 7 7 7 w)Nc                    K   j                          d {    j                          d {   r!| j                  d       j                          y7 >7 (wr4   r   r   s    r
   r:   z*ConditionTests.test_notify_all.<locals>.c1u  r   r   c                    K   j                          d {    j                          d {   r!| j                  d       j                          y7 >7 (wr>   r   r   s    r
   r@   z*ConditionTests.test_notify_all.<locals>.c2|  r   r   r   r5   r?   )r   r$   rF   r/   rG   r   
notify_allrH   r   rI   r9   )r   r9   r:   r@   rJ   rK   r   s         @r
   test_notify_allzConditionTests.test_notify_allp  s      "		   F,  F,mmAV$llnmmA!Q(	"		$	"		$ 	 	 	s7   A/E52E/3)E5E1<E5E3BE51E53E5c                 l    t        j                         }| j                  t        |j                         y r   )r   r$   rQ   rs   r   r   s     r
   test_notify_unacquiredz%ConditionTests.test_notify_unacquired  s$      ",4r	   c                 l    t        j                         }| j                  t        |j                         y r   )r   r$   rQ   rs   r   r   s     r
   test_notify_all_unacquiredz)ConditionTests.test_notify_all_unacquired  s$      ",8r	   c                   K   t        j                         }| j                  dt        |      v        | j                  t        j                  t        |                   |j                          d {    | j                  dt        |      v        |j                  j                  t        j                                | j                  dt        |      v        | j                  t        j                  t        |                   |j                  j                  t        j                                | j                  dt        |      v        | j                  t        j                  t        |                   y 7 w)Nunlockedr   r   	waiters:2)r   r$   r   r   r   r   r   rS   r7   r   r   r   s     r
   r   zConditionTests.test_repr  s       "
d4j01tDz23llnDJ./TYY[)tDz12tDz23TYY[)tDz12tDz23 	s   A1F3F4DFc                 V  K   t        j                         }| j                  |j                                |4 d {    | j	                  |j                                d d d       d {    | j                  |j                                y 7 S7 &# 1 d {  7  sw Y   6xY wwr   )r   r$   r   r   r   r   s     r
   ry   z#ConditionTests.test_context_manager  s       "' 	+ 	+OODKKM*	+ 	+'	+ 	+ 	+ 	+ 	+rz   c                     K   d fd	} |        d {     |t        j                                d {    t        j                         } ||t        j                  |             d {    y 7 _7 ?7 	w)Nc                   K   | t        j                         } |t        j                  |       }j                  |j                  |        j                  | j                                j                  |j                                |4 d {    j                  | j                                j                  |j                                d d d       d {    j                  | j                                j                  |j                                | 4 d {    j                  | j                                j                  |j                                d d d       d {    j                  | j                                j                  |j                                y 7 )7 # 1 d {  7  sw Y   xY w7 7 _# 1 d {  7  sw Y   oxY wwr   )r   r   r$   assertIs_lockr   r   r   )r   r   r   s     r
   fz,ConditionTests.test_explicit_lock.<locals>.f  sg    |||~|((.MM$**d+T[[]+T[[]+ / /../ / T[[]+T[[]+ / /../ / T[[]+T[[]+/ / / / /
/ / / / /s   BG-F:G-?F?G-F= AG-(G)G-,?G+G-6G7AG-=G-?GGGG-G-G*G!G*&G-)NN)r   r   r$   )r   r   r   s   `  r
   test_explicit_lockz!ConditionTests.test_explicit_lock  s^     	,( c		||~g''-... 	.s1   A:A4!A:A67A:.A8/A:6A:8A:c                     K   t        j                          j                  j                          fd} fd} |        d {     |        d {    y 7 7 w)Nc                    K   j                  t              5  t        j                         d d d        t        j                         } | _        | 4 d {    t        j
                  |       }j                  t        d      5  |j                          d {    d d d        d d d       d {    y # 1 sw Y   xY w7 m7 +# 1 sw Y   *xY w7 !# 1 d {  7  sw Y   y xY wwNr"   z"is bound to a different event loop)	rQ   r   r   r   _loopr$   r   rs   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 ) ,,.((	)
) 
) 
)	( (
) )	) )
) 
) 
) 
)s   C.B;)C.CC.,C	CC	C"C*C.5C6C.;C C.	CC	CC.C+C" C+'C.c                    K   t        j                         } | 4 d {    j                  t              5  t        j                  |        d d d        t        j                  |       }|_        j                  t        d      5  |j                          d {    d d d        d d d       d {    y 7 # 1 sw Y   oxY w7 +# 1 sw Y   *xY w7 !# 1 d {  7  sw Y   y xY wwr   )	r   r   rQ   r   r$   r   r   rs   r   r   s     r
   wrong_loop_in_condz?ConditionTests.test_ambiguous_loops.<locals>.wrong_loop_in_cond  s     <<>D 	& 	&&&y1 7%%d67((.!
++ 8 & ))+%%	&	& 	& 	&7 7 &	& &	& 	& 	& 	&s   C/B<C/CB>:C
CC
C#C+C/6C7C/>C	C
CC	CC/C, C#!C,(C/)r   new_event_loop
addCleanupclose)r   r   r   r#   s   `  @r
   test_ambiguous_loopsz#ConditionTests.test_ambiguous_loops  sR     %%'

#	)"	& !""" """ 	#"s$   AA#
AA#A!A#!A#c                 b  K   t        j                         }|4 d {    | j                  t         j                        5  t        j                  |j                         d       d {    d d d        d d d       d {    y 7 j7 # 1 sw Y   xY w7 # 1 d {  7  sw Y   y xY ww)Ng      ?timeout)r   r$   rQ   TimeoutErrorr   r   )r   	conditions     r
   test_timeout_in_blockz$ConditionTests.test_timeout_in_block  s     %%'	 	F 	F""7#7#78 F&&y~~'7EEEF	F 	F 	FEF F	F 	F 	F 	Fsn   B/BB/ B)B*B
+B/B7B/BB/
BB	BB/B, B#!B,(B/N)r)   r{   r|   r   r   r   r   r   r   r   r   r   r   r   r   ry   r   r   r   r   r	   r
   r   r     sX    =%~	''2 4
#$J/2%h"%H594 (/4$#LFr	   r   c                   `    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y)SemaphoreTestsc                 l    t        j                  d      }| j                  |j                                y r   )r   r&   r   r   r   sems     r
   test_initial_value_zeroz&SemaphoreTests.test_initial_value_zero  s$    "

%r	   c                   K   t        j                         }| j                  t        |      j	                  d             | j                  t
        j                  t        |                   |j                          d {    | j                  t        |      j	                  d             | j                  dt        |      v       | j                  t
        j                  t        |                   |j                  t        j                         |_        |j                  j                  t        j                                | j                  dt        |      v        | j                  t
        j                  t        |                   |j                  j                  t        j                                | j                  dt        |      v        | j                  t
        j                  t        |                   y 7 w)Nz[unlocked, value:1]>r   waitersr   r   )r   r&   r   r   r   r   r   r   rS   collectionsdequer7   r   r   r   s     r
   r   zSemaphoreTests.test_repr   sL    !S	**+ABCtCy12kkmS	**;78	c23tCy12<<&,,.CLDIIK(tCy01tCy12DIIK(tCy01tCy12 	s   A>H H	F	Hc                 P  K   t        j                         }| j                  d|j                         | j	                  t
        d      5  | d {    d d d        | j                  |j                                | j                  d|j                         y 7 H# 1 sw Y   GxY ww)Nr5   z4object Semaphore can't be used in 'await' expression)r   r&   rG   _valuer   r   r   r   r   s     r
   test_semaphorezSemaphoreTests.test_semaphore  s     !CJJ'##B
 	 II		 	&CJJ' 		 	s1   AB&	BBBAB&BB#B&c                 N    | j                  t        t        j                  d       y )N)rQ   
ValueErrorr   r&   r   s    r
   test_semaphore_valuez#SemaphoreTests.test_semaphore_value"  s    *g&7&7<r	   c                   K   t        j                  d      g }| j                  j                          d {          | j                  j                          d {          | j	                  j                                fd}fd}fd}fd}t        j                   ||            }t        j                   ||            }t        j                   ||            }t        j                  d       d {    | j                  dg|       | j                  j                                | j                  dt        j                               | j                  dj                         t        j                   ||            }	j                          j                          | j                  dj                         t        j                  d       d {    | j                  dj                         | j                  dt        |             | j                  j                                | j                  dt        j                               | j                  dj                         | j                  |j                                | j                  |j                                |||	g}
|
D cg c]&  }|j                         s|j                         s%|( }}| j                  dt        |             j                          t        j                  |
  d {    y 7 	7 7 C7 _c c}w 7 w)	NrC   c                 d   K   j                          d {    | j                  d       y7 wr4   r6   r9   r   s    r
   r:   z'SemaphoreTests.test_acquire.<locals>.c1-  *     ++-MM!  r<   c                 d   K   j                          d {    | j                  d       y7 wr>   r6   r  s    r
   r@   z'SemaphoreTests.test_acquire.<locals>.c22  r  r<   c                 d   K   j                          d {    | j                  d       y7 wrB   r6   r  s    r
   rD   z'SemaphoreTests.test_acquire.<locals>.c37  r  r<   c                 d   K   j                          d {    | j                  d       y7 w)N   Tr6   r  s    r
   c4z'SemaphoreTests.test_acquire.<locals>.c4<  r  r<   r   r5   r?   )r   r&   r   r   r   r   rF   r/   rG   r_   rS   r  rH   rI   r9   gather)r   r9   r:   r@   rD   r  rJ   rK   rL   t4
race_tasksr   
done_tasksr   s                @r
   rM   zSemaphoreTests.test_acquire%  sf    "ckkm+,ckkm+,&	
	
	
	
   F,  F,  F,mmA!f%

%C-.CJJ'  F,CJJ'mmACJJ'CK(

%C-.CJJ'	"		$"b\
!+GAqvvxAHHJaG
GC
O, 	nnj)))o ,+6 	 	 H
 	*ss   6MM&M M!B$MMC&M,M-C"MM%M6M:AM<M=MMMMMc                   K   t        j                         }|j                          d {    t        j                  |j                               }t        j                         j                  |j                         | j                  t         j                        5  | d {    d d d        | j                  |j                   xs t        d |j                  D                     y 7 7 I# 1 sw Y   HxY ww)Nc              3   <   K   | ]  }|j                           y wr   rI   ).0r   s     r
   	<genexpr>z5SemaphoreTests.test_acquire_cancel.<locals>.<genexpr>k  s     EfFKKME   )r   r&   r   rF   r(   rO   rP   rQ   rR   r   rS   all)r   r   r   s      r
   rU   z"SemaphoreTests.test_acquire_cancelb  s     !kkm%%ckkm4  ",,W^^<w556 	MM	S\\) FEEE	G 	
 	 	r   c                   K   t        j                  d      }t        j                  |j                               }t        j                  |j                               }t        j                  |j                               }t        j                  |j                               }t        j                  d       d {    |j                          |j                          |j                          t        j                  d       d {    t        j                  d       d {    t        d ||fD              }| j                  |d       | j                  |j                                | j                  |j                                |j                          |j                          t        j                  d       d {    y 7 7 7 7 w)Nr   valuec              3   <   K   | ]  }|j                           y wr   r  )r  r   s     r
   r  zCSemaphoreTests.test_acquire_cancel_before_awoken.<locals>.<genexpr>}  s     2Aqvvx2r  r5   )r   r&   rF   r   r/   rP   rH   sumrG   r   rI   r   )r   r   rJ   rK   rL   r  num_dones          r
   !test_acquire_cancel_before_awokenz0SemaphoreTests.test_acquire_cancel_before_awokenm  sB    a(  /  /  /  /mmA
		
		mmAmmA2"b221%	"#
		
		mmA 	 	 	sJ   B;G=G>AG
GG'G(B GG	GGGGc                 :  K   t        j                  d      }t        j                  |j                               }t        j                  |j                               }t        j                  d       d {    |j                          |j                          t        j                  d       d {    t        j                  d       d {    | j                  |j                                | j                  |j                                y 7 7 b7 Gw)Nr   r  )
r   r&   rF   r   r/   rP   rH   r   r   rI   )r   r   rJ   rK   s       r
   test_acquire_hangz SemaphoreTests.test_acquire_hang  s     a(  /  /mmA
		mmAmmA

%	" 	 	s7   A5D7D8<D4D5DDADDDc                    K   t        j                  d      fd} fd}t        j                   |             }t        j                   |             t        j                  |d       d {   \  }} j	                  |d u         j	                  t        |t         j                               t        j                  j                         d       d {    y 7 q7 w)Nr5   c                     K    4 d {    t        j                  d       d {    d d d       d {    j                          y 7 B7 '7 # 1 d {  7  sw Y   )xY wwr   )r   r/   rP   )r   rK   s   r
   r:   z/SemaphoreTests.test_acquire_no_hang.<locals>.c1  sX      ' 'mmA&&&' 'IIK'&' ' ' 'sQ   A(AA(AAAA(AA(AA(A%AA%!A(c                     K   4 d {     j                  d       d d d       d {    y 7 &7 # 1 d {  7  sw Y   y xY wwr   )r   r   s   r
   r@   z/SemaphoreTests.test_acquire_no_hang.<locals>.c2  sG      ' '  &' ' ' ' ' ' '9   A
1A
5A
3A
A
A>AA
T)return_exceptionsg      ?r   )	r   r&   rF   r  r   
isinstancerR   r   r   )r   r:   r@   rJ   r1r2r   rK   s   `     @@r
   test_acquire_no_hangz#SemaphoreTests.test_acquire_no_hang  s     "	
	'   &  &~~b"EEBd
#
2w'='=>?s{{}c:::	 F 	;s%   A1C,6C(7A+C,"C*#C,*C,c                 l    t        j                         }| j                  t        |j                         y r   )r   r'   rQ   r  rH   r   s     r
   rt   z(SemaphoreTests.test_release_not_acquired  s$    &&(*ckk2r	   c                   K   t        j                         }|j                          d {    | j                  |j	                                |j                          | j                  |j	                                y 7 Swr   )r   r&   r   r   r   rH   r   r   s     r
   rv   z&SemaphoreTests.test_release_no_waiters  sW     !kkm

%&	 	rw   c                   K   t        j                  d      g fd}t        j                         4 d {   }|j                   |d             |j                   |d             |j                   |d             d d d       d {    | j	                  g d       y 7 n7 # 1 d {  7  sw Y   +xY ww)Nr5   c                   K   j                          d {    j                  |  d       t        j                  d       d {    j	                          j                          d {    j                  |  d       t        j                  d       d {    j	                          y 7 7 p7 J7 w)N_1r.   _2)r   r7   r   r/   rH   )tagr9   r   s    r
   coroz4SemaphoreTests.test_acquire_fifo_order.<locals>.coro  s     ++-MMSE*%--%%%KKM++-MMSE*%--%%%KKM  %  %sE   B?B70B?B9	'B?0B;10B?!B="B?9B?;B?=B?r:   r@   rD   )c1_1c2_1c3_1c1_2c2_2c3_2)r   r&   	TaskGrouprF   rG   )r   r6  tgr9   r   s      @@r
   test_acquire_fifo_orderz&SemaphoreTests.test_acquire_fifo_order  s     "		 $$& 	' 	'"NN4:&NN4:&NN4:&	' 	'
 	<	
	' 	' 	' 	' 	'sE   6CB)CAB-CB+C+C-B?3B64B?;Cc                   	K   t        j                  d      	g }	fd}	fd}	fd}t        j                   ||            }t        j                   ||            }t        j                   ||            }t        j                  d       d {    	j	                          	j	                          |||g}t        j
                  |  d {    | j                  g d|       y 7 X7 w)Nr5   c                 d   K   j                          d {    | j                  d       y7 wr4   r6   r  s    r
   r:   z4SemaphoreTests.test_acquire_fifo_order_2.<locals>.c1  r  r<   c                    K   j                          d {    | j                  d       j                          j                          d {    | j                  d       y7 O7 w)Nr?   r  T)r   r7   rH   r  s    r
   r@   z4SemaphoreTests.test_acquire_fifo_order_2.<locals>.c2  sT     ++-MM!KKM++-MM!    s!   A+A'8A+A)A+)A+c                 d   K   j                          d {    | j                  d       y7 wrB   r6   r  s    r
   rD   z4SemaphoreTests.test_acquire_fifo_order_2.<locals>.c3  r  r<   r   )r5   r?   rC   r  )r   r&   rF   r/   rH   r  rG   
r   r9   r:   r@   rD   rJ   rK   rL   tasksr   s
            @r
   test_acquire_fifo_order_2z(SemaphoreTests.test_acquire_fifo_order_2  s     "	
		
   F,  F,  F,mmARnne$$$v. 	 	%s$   BC0C,>C0C.C0.C0c                 H  	K   t        j                  d      	g }	fd}	fd}	fd}t        j                   ||            }t        j                   ||            }t        j                   ||            }t        j                  d       d {    |j	                          t        j                  d       d {    	j                          	j                          |||g}t        j                  |ddi d {    | j                  ddg|       y 7 7 ]7 w)	Nr   c                 d   K   j                          d {    | j                  d       y7 wr4   r6   r  s    r
   r:   z4SemaphoreTests.test_acquire_fifo_order_3.<locals>.c1  r  r<   c                 d   K   j                          d {    | j                  d       y7 wr>   r6   r  s    r
   r@   z4SemaphoreTests.test_acquire_fifo_order_3.<locals>.c2  r  r<   c                 d   K   j                          d {    | j                  d       y7 wrB   r6   r  s    r
   rD   z4SemaphoreTests.test_acquire_fifo_order_3.<locals>.c3  r  r<   r*  Tr?   rC   )r   r&   rF   r/   rP   rH   r  rG   rD  s
            @r
   test_acquire_fifo_order_3z(SemaphoreTests.test_acquire_fifo_order_3  s     "	
	
	
   F,  F,  F,mmA
		mmARnne<t<<<!Q( 	 	 	=s7   BD"D,D" DAD"D D"D" D"N)r)   r{   r|   r   r   r  r  rM   rU   r#  r%  r.  rt   rv   r?  rF  rK  r   r	   r
   r   r     sK    &3*(=;*z	G2#;,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                 L   K   t         |           d {    d| _        y 7 w)N   )super
asyncSetUpN)r   	__class__s    r
   rQ  zBarrierTests.asyncSetUp  s$     g """ 	#s   $"$c                 p    t        |      D cg c]  }t        j                   |              }}|S c c}w r   )ranger   rF   )r   nr6  _rE  s        r
   
make_taskszBarrierTests.make_tasks  s1    6;Ah?$$TV,?? @s   !3c                 n   K   | j                  ||      }t        j                  |  d {   }||fS 7 wr   )rX  r   r  )r   rV  r6  rE  r   s        r
   gather_taskszBarrierTests.gather_tasks"  s6     4(NNE**Ez +s   (53	5c                 $  K   t        j                  | j                        }| j                  dt	        |             | j                  t        d      5  | d {    d d d        | j                  dt	        |             y 7 (# 1 sw Y   'xY ww)Nfillingz2object Barrier can't be used in 'await' expression)r   BarrierrR  assertInr   r   r   r   barriers     r
   test_barrierzBarrierTests.test_barrier'  su     //$&&)ig/##@
 	 MM		 	ig/ 		 	s0   ABBBB$BBB	Bc                 Z  K   t        j                  | j                        }| j                  t        j                  t        |                   | j                  dt        |             g }d }d}t        |      D ],  }|j                  t        j                   ||                   . t        j                  d       d {    | j                  t        j                  t        |                   | j                  d| d| j                   t        |      v        | j                  dt        |             t        |j                  |j                  z
        D ],  }|j                  t        j                   ||                   . t        j                  d       d {    | j                  t        j                  t        |                   | j                  dt        |             t        |      D ],  }|j                  t        j                   ||                   . t        j                  d       d {    |j                          d {    | j                  t        j                  t        |                   | j                  dt        |             t        |      D ],  }|j                  t        j                   ||                   . t        j                  d       d {    |j                          d {    | j                  t        j                  t        |                   | j                  d	t        |             | j                  |j                          t        j"                  |d
di d {    y 7 7 7 [7 F7 7 7 w)Nr\  c                 @   K   | j                          d {    y 7 wr   r   r`  s    r
   r   z$BarrierTests.test_repr.<locals>.wait9  s     ,,.  s   r?   r   zwaiters:/draining	resettingbrokenr*  T)r   r]  rR  r   r   r   r   r^  rU  r7   rF   r/   parties	n_waitingresetabortrh  r  )r   r`  r   r   incris         r
   r   zBarrierTests.test_repr2  s    //$&&)tG}56ig/	! t 	?ANN7..tG}=>	?mmAtG}56(4&$&&2d7mCDig/ w):)::; 	?ANN7..tG}=>	?mmAtG}56j$w-0 t 	?ANN7..tG}=>	?mmAmmotG}56k4=1 t 	?ANN7..tG}=>	?mmAmmotG}56hW.' nng>>>>I 	 	 	 	 	?s   CN+NC!N+%N&BN+NN+N"BN+;N%<N+N'A?N+N)N+N+N+"N+%N+'N+)N+c                    K   | j                  t        d        | j                  t        d        | j                  t        j                  | j
                        t        j                         y w)Nc                  ,    t        j                  d      S r   r   r]  r   r	   r
   r   z3BarrierTests.test_barrier_parties.<locals>.<lambda>f  s    gooa.@ r	   c                  ,    t        j                  d      S )Nrq  r   r	   r
   r   z3BarrierTests.test_barrier_parties.<locals>.<lambda>g  s    goob.A r	   )rQ   r  assertIsInstancer   r]  rR  r  s    r
   test_barrier_partiesz!BarrierTests.test_barrier_partiese  sI     *&@A*&ABgoodff5wGs   A-A/c                   K   d| _         t        j                  | j                         g fd}| j                  | j                   |       d {    | j	                  t              t        t        | j                                      | j                  j                  d       | j                  j                         y 7 sw)NrC   c                     K   4 d {   } j                  |        d d d       d {    y 7 &7 # 1 d {  7  sw Y   y xY wwr   r7   )rn  r`  resultss    r
   r6  z/BarrierTests.test_context_manager.<locals>.corop  sG      " "!q!" " " " " " "r)  r   )rR  r   r]  rZ  assertListEqualsortedlistrU  rG   rj  r   rh  r   r6  r`  ry  s     @@r
   ry   z!BarrierTests.test_context_managerk  s     //$&&)	" ---VG_d5=.AB**A.(	 	.s   ACCA4Cc                    K   t        j                  d      fd} |        d {   }| j                  |       | j                  j                  d       | j                  j                         y 7 Mw)Nr5   c                  x   K   4 d {   } 	 d d d       d {    y7 7 # 1 d {  7  sw Y   y xY wwr   r   )rn  r`  s    r
   r   z-BarrierTests.test_filling_one_task.<locals>.f}  s>       !      s0   :!:%:#::7.7:r   )r   r]  r   rG   rj  r   rh  )r   r   retr`  s      @r
   test_filling_one_taskz"BarrierTests.test_filling_one_taskz  s^     //!$	 Ci**A.(	 s   %A8A6AA8c                   K   t        j                  d      }t        j                  |j                               }t        j                  d       d {    | j                  |j                  d       t        j                  |j                               }t        j                  d       d {    | j                  |j                         |j                                | j                  |j                         |j                                | j                  |j                  d       | j                  |j                         y 7 7 wNr5   r   )r   r]  rF   r   r/   rG   rj  r9   rI   r   rh  )r   r`  rJ   rK   s       r
   test_filling_one_task_twicez(BarrierTests.test_filling_one_task_twice  s     //!$  0mmA**A.  0mmAbiik2BGGI.**A.( 	 	s&   AEEAE/E
0BE
Ec                 t  K   d| _         t        j                  | j                         }t        j                  |j	                               }t        j
                  d       d {    | j                  |j                  d       | j                  dt        |             t        j                  |j	                               }t        j
                  d       d {    | j                  |j                  d       | j                  dt        |             t        j                  |j	                               }t        j
                  d       d {    t        j                  |||g       d {    | j                  |j                  d       | j                  |j                         y 7 K7 7 a7 Cw)NrC   r   r5   r\  r?   )rR  r   r]  rF   r   r/   rG   rj  r^  r   r   rh  )r   r`  rJ   rK   rL   s        r
   test_filling_task_by_taskz&BarrierTests.test_filling_task_by_task  s<    //$&&)  0mmA**A.ig/  0mmA**A.ig/  0mmAllBB<(((**A.( 	
 	
 	(sJ   A"F8$F/%A6F8F2A6F8F4F82F63=F82F84F86F8c                   K   t        j                  | j                        g fd}| j                  | j                  |       d {    | j	                  t              | j                  dz         | j	                  j                  d      | j                         | j	                  j                  d      | j                         | j	                  j                  d       | j                  j                         y 7 w)Nc                  "  K    4 d {    j                  d        4 d {    j                  d       d d d       d {    d d d       d {    y 7 R7 87 # 1 d {  7  sw Y   )xY w7  # 1 d {  7  sw Y   y xY ww)NTFrx  r`  ry  s   r
   r6  z8BarrierTests.test_filling_tasks_wait_twice.<locals>.coro  s      * *t$" * *NN5)* ** * ** * * * ** * * *s   BABA:AA:A#A:A!A:BA8BA:!A:#A5	)A,*A5	1A:8B:B BBBr?   TFr   )
r   r]  rR  rZ  rG   r_   countrj  r   rh  r}  s     @@r
   test_filling_tasks_wait_twicez*BarrierTests.test_filling_tasks_wait_twice  s     //$&&)	* ---Wtvvax0t,dff5u-tvv6**A.( 	.s   ADDB;Dc                   K   t        j                  | j                        g g fd}| j                  | j                  |       d {   \  }}| j	                  t              | j                         | j                  t                     | j	                  t              | j                         | j                  t                     | j                  t        |      t        t        | j                                     | j	                  j                  d       | j                  j                         y 7 w)Nc                  L  K   4 d {    j                  d       4 d {   } j                  d       | cd d d       d {    cd d d       d {    S 7 U7 ;7 7 # 1 d {  7  sw Y   nxY wd d d       d {  7   y # 1 d {  7  sw Y   y xY wwr   rx  )rn  r`  results1results2s    r
   r6  z@BarrierTests.test_filling_tasks_check_return_value.<locals>.coro  s       %"  aOOD)           s   B$A B$BA"BA(B	A$
BB$A&B$"B$B&B$(A:	.A1/A:	6B=B$B	B$B!BB!B$r   )r   r]  rR  rZ  rG   r_   r   r  rz  r{  r|  rU  rj  r   rh  )r   r6  r   rW  r`  r  r  s       @@@r
   %test_filling_tasks_check_return_valuez2BarrierTests.test_filling_tasks_check_return_value  s     //$&&)	 ((66QX/H&X/H&VC[$uTVV}*=>**A.( 7s   A
EEC5Ec                   K   t        j                  | j                        g fd}| j                  | j                  |       d {    | j	                  t              | j                         | j	                  d   d       | j                  t        d | j                  dz
                | j	                  j                  d       | j                  j                         y 7 w)Nc                     K    4 d {    j                  dt               v        d d d       d {    y 7 17 # 1 d {  7  sw Y   y xY ww)Nrf  )r7   r   r  s   r
   r6  z.BarrierTests.test_draining_state.<locals>.coro  sN      < <zT']:;< < < < < < <s>   A<AA A>AA AA	AAr  Fr5   r   )r   r]  rR  rZ  rG   r_   r   r  rj  r   rh  r}  s     @@r
   test_draining_statez BarrierTests.test_draining_state  s     //$&&)	<
 ---Wtvv.e,GITVVAX./0**A.( 	.s   AC.C,B!C.c                    K   d}t        j                  | j                        t        j                  | j                  |z
        g }|d}fd}| j                  | j                  |       d {    y 7 w)Nr?   r   c                     K    j                          d {    dkD  rdz   j                          d {    y j                          d {     j                          d {    y 7 X7 87 !7 wrp   r   )r`  barrier_nowaitingrewait_ns   r
   r6  z=BarrierTests.test_blocking_tasks_while_draining.<locals>.coro  sq      ,,.   !|Alln$$ (,,...lln$$ ! % /$sC   A8A0!A8A2A8A4A8*A6+A82A84A86A8)r   r]  rR  rZ  )r   rewaitry  counterr6  r`  r  r  s        @@@r
   "test_blocking_tasks_while_drainingz/BarrierTests.test_blocking_tasks_while_draining  se     //$&&)#OODFFVO<	%& ---s   A0A=5A;6A=c                 *  K   d| _         t        j                  | j                         g fd}t        j                   |             }t        j                  d       d {    | j                  j                  d       t        j                   |             }t        j                  d       d {    | j                  j                  d       |j                          t        j                  d       d {    | j                  j                  d       | j                  t        j                        5  | d {    d d d        | j                  |j                                t        j                   |             }t        j                  d       d {    | j                  j                  d       t        j                   |             }t        j                  |||       d {    | j                  t              | j                          | j                  t                     | j                  j                  d       | j                  j                          y 7 7 7 {7 8# 1 sw Y   8xY w7 7 w)NrC   c                  d   K    j                          d {    j                  d       y 7 wr   r   r  s   r
   r6  z8BarrierTests.test_filling_tasks_cancel_one.<locals>.coro  s'     ,,.  NN4  !r<   r   r5   r?   )rR  r   r]  rF   r/   rG   rj  rP   rQ   rR   r   ra   r  r_   r  r   rh  )r   r6  rJ   rK   rL   r  r`  ry  s         @@r
   test_filling_tasks_cancel_onez*BarrierTests.test_filling_tasks_cancel_one  s    //$&&)	!   (mmA**A.  (mmA**A.
		mmA**A.w556 	HH	'  (mmA**A.  (nnRR(((Wtvv.G%**A.(3 	 	 	 	 	
 	 	)s   A!J%I6&AJ8I99AJI<?JJI?JAJ%J&AJ:J;A<J9J<J?JJ	JJc                 (  K   t        j                  d      }t        j                  |j                                t        j                  d       d {    | j                  |j                  d       | j                  |j                         y 7 <wr  )	r   r]  rF   rk  r/   rG   rj  r   rh  r_  s     r
   test_reset_barrierzBarrierTests.test_reset_barrier-  sg     //!$GMMO,mmA**A.( 	   ABB=Bc                 x  K   t        j                  | j                        g fd}fd}| j                  | j                  dz
  |      }t        j                  d       d {    t        j
                   |              t        j                  |  d {    | j                  t              | j                  dz
         | j                  t                     | j                  j                  d       | j                  dt                     | j                  j                         y 7 7 w)Nc                     K   	  j                          d {    y 7 # t        j                  $ r j                  d       Y y w xY wwr   r   r   BrokenBarrierErrorr7   r  s   r
   r6  zABarrierTests.test_reset_barrier_while_tasks_waiting.<locals>.coro:  s;     %lln$$-- %t$%s1   A
    A
  $AA
AA
c                  B   K    j                          d {    y 7 wr   )rk  rd  s   r
   
coro_resetzGBarrierTests.test_reset_barrier_while_tasks_waiting.<locals>.coro_reset@  s     --/!!s   r5   r   rg  )r   r]  rR  rX  r/   rF   r  rG   r_   r   r  rj  assertNotInr   r   rh  )r   r6  r  rE  r`  ry  s       @@r
   &test_reset_barrier_while_tasks_waitingz3BarrierTests.test_reset_barrier_while_tasks_waiting6  s     //$&&)	%	" 40mmA 	JL)nne$$$Wtvvax0G%**A.d7m4( 	 	%s%   A$D:(D6)3D:D8BD:8D:c                   K   t        j                  | j                        g | j                  dz  fd}| j                  | j                  |       d {    | j	                  dgz         | j	                  j
                  d       | j                  dt                     | j                  j                         y 7 mw)Nr?   c                     K   	  j                          d {     j                  k(  r j                          d {    y y 7 -7 # t        j                  $ r j                  d       Y y w xY wwr   )r   _countrk  r   r  r7   )r`  rest_of_tasksr  s   r
   r6  zFBarrierTests.test_reset_barrier_when_tasks_half_draining.<locals>.coroV  sj     	*lln$$ !GNN2!--/)) 3 % * -- &%&sH   A4A
 AA
 "A4A A4A
 A4
$A1.A40A11A4Tr   rg  
r   r]  rR  rZ  rG   rj  r  r   r   rh  )r   r6  r`  r  r  s     @@@r
   +test_reset_barrier_when_tasks_half_drainingz8BarrierTests.test_reset_barrier_when_tasks_half_drainingQ  s     //$&&)	
	* ---D6-#78**A.d7m4( 	.s   ACC
A.Cc                   K   t        j                  | j                        g g | j                  dz  dfd}| j                  | j                  |       d {    | j	                  dgz         | j	                  g        | j	                  j
                  d       | j                  dt                     | j                  j                         y 7 w)Nr?   r   c                    K   	  j                          d {    dz  kD  r1 j                          d {     j                          d {    y 	  j                          d {    y 7 Y7 97 #7 # t        j                  $ r j	                  d       Y y w xY w# t        j                  $ r- j	                  d        j                          d {  7   Y y w xY wwr4   )r   rk  r   r  r7   r`  blocking_tasksr  r  r  s   r
   r6  zTBarrierTests.test_reset_barrier_when_tasks_half_draining_half_blocking.<locals>.corop  s     .lln$$ 
>)!--/)) ",,.((.%lln,,# % * ) -"55 . -.# -- %% lln$$%s   C'B$ A2B$ C'A4C'A6C'A: ,A8-A: 1C'2B$ 4C'6C'8A: :$B!C' B!!C'$7C$CC$!C'#C$$C'Trg  r  r   r6  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2&**A.d7m4( 	.s   AC&$C$%B C&c                   K   t        j                  | j                        g g fd}fd}| j                  | j                  dz
  |      }t        j                  j                                t        j                  d       d {    t        j                   |              t        j                  |  d {    | j                  j                         | j                  t              | j                  dz
         | j                  t                     | j                  t              | j                         | j                  t                     | j                  j                  d       y 7 7 w)Nc                  L  K   	  j                          d {     j                          d {    j                  d       y 7 .# t        j                  $ r j                  d       Y Rw xY w7 B#  j                          d {  7   j                  d       w xY wwr   r  )r`  r  r  s   r
   coro1zTBarrierTests.test_reset_barrier_while_tasks_waiting_and_waiting_again.<locals>.coro1  s~     &lln$$ lln$$% %-- &%& %glln$$%s_   B$A	 AA	 B$A3B$A	 	$A0-A5 /A00A5 3B$5B!	B
B!!B$c                     K    4 d {    j                  d       d d d       d {    y 7 &7 # 1 d {  7  sw Y   y xY wwr   rx  )r`  r  s   r
   coro2zTBarrierTests.test_reset_barrier_while_tasks_waiting_and_waiting_again.<locals>.coro2  sE      & &%& & & & & & &r)  r5   r   )r   r]  rR  rX  rF   rk  r/   r  r   rh  rG   r_   r   r  rj  )r   r  r  rE  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 	GMMO,mmA 	EG$nne$$$(Xq1H&X/H&**A. 	
 	%s%   BFF3FFB>FFc                 l   K   t        j                   j                        g g g d fd} j                   j                  |       d {     j	                  j
                          j                  t                      j                  t               j                  dz
          j                  t              d        j                  t               j                          j                  t                      j                  j                  d       y 7 حw)Nr   c                    K   j                          d {   } dz  j                  k(  r1j                          d {    j                          d {    n*	 j                          d {    j                  d       j                          d {   }j                  d       y 7 7 s7 ]7 E# t        $ r}j                  d       Y d }~Qd }~ww xY w7 Ewr4   )r   rR  rk  r7   	Exception)	rn  ekr`  r  r  r  results3r   s	      r
   r6  zBBarrierTests.test_reset_barrier_while_tasks_draining.<locals>.coro  s      lln$AQJEmmo%% lln$$*!,,.(( OOD) lln$AOOD!- % & % ) ! *OOD))* %s{   C&B5+C&B7C&B9C&"B= 5B;6B= C&C$C&7C&9C&;B= =	C!CC&C!!C&r5   )r   r]  rR  rZ  r   rh  r   r  rG   r_   rj  )r   r6  r`  r  r  r  r  s   ` @@@@@r
   'test_reset_barrier_while_tasks_drainingz4BarrierTests.test_reset_barrier_while_tasks_draining  s     //$&&)	" 	"6 ---(H&Xq1X*X/H&**A. 	.s   AD4D2CD4c                 (  K   t        j                  d      }t        j                  |j                                t        j                  d       d {    | j                  |j                  d       | j                  |j                         y 7 <wr  )	r   r]  rF   rl  r/   rG   rj  r   rh  r_  s     r
   test_abort_barrierzBarrierTests.test_abort_barrier  se     //!$GMMO,mmA**A.' 	r  c                   K   t        j                  | j                        g g | j                  dz  dfd}| j                  | j                  |       d {    | j	                  j
                         | j                  dgz         | j                  dg| j                  z
  dz
  z         | j                  j                  d       | j                  dt                     y 7 w)Nr?   r   c                  l  K   	  j                          d {    dz  kD  r j                          d {    y 	  j                          d {    y 7 A7 !7 	# t        j                  $ r j	                  d       Y y w xY w# t        j                  $ r j	                  d       Y y w xY wwr4   )r   rl  r   r  r7   r  s   r
   r6  zTBarrierTests.test_abort_barrier_when_tasks_half_draining_half_blocking.<locals>.coro  s     .lln$$
 
>)!--/)).%lln,, % * -"55 . -. -- &%&s}   B4B
 AB
 B4AB4A  AA  B4B
 B4A   $BB4BB4
$B1.B40B11B4Tr5   rg  )
r   r]  rR  rZ  r   rh  rG   rj  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D6466.+@+B#CD**A.d7m4 	.s   AC:$C8%BC:c                    K   t        j                   j                        g g  fd} j                   j                  |       d {     j	                  j
                          j                  t              d        j                  t               j                  dz
          j	                  t                      j                  j                  d       y 7 w)Nc                    K   	 4 d {   } | j                   dz  k(  rt        d d d       d {    4 d {    j                  d       d d d       d {    y 7 Y7 3# 1 d {  7  sw Y   CxY w7 ?7  # 1 d {  7  sw Y   y xY w# t        j                  $ r j                  d       Y y t        $ r j                          d {  7   Y y w xY wwr>   )rR  rs   r7   r   r  rl  )rn  r`  r  r  r   s    r
   r6  z<BarrierTests.test_abort_barrier_when_exception.<locals>.coro  s     	&" + +aDFFAI~**+ + # * *OOD)* * *+ + + + +* * * * *-- &% &mmo%%&s   C$B A%B A)B A'
B A>B BB B  B $C$%B 'B )A;/A20A;7B  B BB	BB C$B $C!;C$=C!CC!C$ C!!C$r   r5   )
r   r]  rR  rZ  r   rh  rG   r_   r  rj  )r   r6  r`  r  r  s   ` @@@r
   !test_abort_barrier_when_exceptionz.BarrierTests.test_abort_barrier_when_exception  s     //$&&)
	& ---'X*Xq1H&**A. 	.s   AC-C+BC-c                    K   t        j                   j                        t        j                   j                        g g g  fd} j                   j                  |       d {     j	                  j
                          j                  t              d        j                  t               j                  dz
          j                  t                      j                  t               j                          j                  t                      j                  j                  d       y 7 حw)Nc                  z  K   	 j                          d {   } | j                  dz  k(  rt        j                          d {    j                  d       j                          d {   } | j                  dz  k(  rj                          d {    j                          d {    j                          d {    j                  d       y 7 7 # t        j
                  $ r j                  d       Y t        $ r j                          d {  7   Y w xY w7 7 7 7 mwr>   )r   rR  rs   r7   r   r  rl  rk  )rn  barrier1barrier2r  r  r  r   s    r
   r6  zKBarrierTests.test_abort_barrier_when_exception_then_resetting.<locals>.coro1  s     	'"--/)	>&&mmo%%% mmo%ATVVQYnn&&&--/!!--/!!OOD!% * &-- &% 'nn&&&' &&!!s   D;C& C"/C& C$	C& D;1D32)D;D5D;3D74D;D9D;"C& $C& &$D0
D;D0'D*(D0-D;/D00D;5D;7D;9D;r   r5   )r   r]  rR  rZ  r   rh  rG   r_   r   r  rj  )r   r6  r  r  r  r  r  s   ` @@@@@r
   0test_abort_barrier_when_exception_then_resettingz=BarrierTests.test_abort_barrier_when_exception_then_resetting)  s     ??466*??466*	" 	", ---)X*Xq1H&X/H&++Q/ 	.s   A.E6E7CE)r)   r{   r|   rQ  rX  rZ  ra  r   ru  ry   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  __classcell__)rS  s   @r
   rM  rM    s    
	01?fH))) ),)()0)$.:#)J))6)0&)P#/L+/Z( 5D/4'0r	   rM  __main__)__doc__unittestr   rer   r   STR_RGX_REPRcompiler   r   IsolatedAsyncioTestCaser   r~   r   r   rM  r)   mainr   r	   r
   <module>r     s       	    2::l#(@(00 @(Fi$11 i$XnFX55 nFb[)X55 [)|x0833 x0v zHMMO r	   