
    z%i}                        	 d dl Z d dlZd dlZd dlmZmZ d dlZd dlZd dlZd dl	m
Z
 d dlmZ  ej                  e
j                  d      Zd Z G d de      Z G d	 d
ej&                        Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zy)    N)start_new_threadTIMEOUT_MAX)support)threading_helperz9platform doesn't support fork (no _at_fork_reinit method)c                  .    t        j                  d       y )N{Gz?)timesleep     C/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/lock_tests.py_waitr      s    JJtr   c                   (    e Zd Z	 ddZd Zd Zd Zy)Bunchc                     	  _         | _        g  _        g  _        |  _        t        j                          _         j                  j                           fd}	 t        |      D ]  }t        |d        y #  d _         xY w)Nc                  z   t        j                         } j                  j                  |        	          j                  j                  |        j
                  st                j
                  sy y # j                  j                  |        j
                  st                j
                  sw w xY wN)	threading	get_identstartedappendfinished	_can_exitr   )tidfselfs    r   taskzBunch.__init__.<locals>.task,   s    %%'CLL$$$S)..G .. $$S)..G ..s   A9 9>B:8B:r   T)r   nr   r   r   r   wait_threads_exitwait_thread	__enter__ranger   )r   r   r   wait_before_exitr   is   ``    r   __init__zBunch.__init__   s    	
 --+==?""$		1X + r*+	!DNs   "A? ?
B	c                     t        | j                        | j                  k  r.t                t        | j                        | j                  k  r-y y r   )lenr   r   r   r   s    r   wait_for_startedzBunch.wait_for_started=   s3    $,,$&&(G $,,$&&(r   c                     t        | j                        | j                  k  r-t                t        | j                        | j                  k  r-| j                  j                  d d d        y r   )r'   r   r   r   r    __exit__r(   s    r   wait_for_finishedzBunch.wait_for_finishedA   sM    $-- 466)G $-- 466) 	!!$d3r   c                     d| _         y NT)r   r(   s    r   	do_finishzBunch.do_finishG   s	    r   N)F)__name__
__module____qualname__r%   r)   r,   r/   r   r   r   r   r      s    >4r   r   c                       e Zd Zd Zd Zd Zy)BaseTestCasec                 6    t        j                         | _        y r   )r   threading_setup_threadsr(   s    r   setUpzBaseTestCase.setUpL   s    (88:r   c                 d    t        j                  | j                    t        j                          y r   )r   threading_cleanupr7   r   reap_childrenr(   s    r   tearDownzBaseTestCase.tearDownO   s     **DMM:r   c                 X    | j                  ||dz         | j                  ||dz         y )Ng333333?g      $@)assertGreaterEqual
assertLess)r   actualexpecteds      r   assertTimeoutzBaseTestCase.assertTimeoutS   s*     	3740r   N)r0   r1   r2   r8   r<   rB   r   r   r   r4   r4   K   s    ; 1r   r4   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y)BaseLockTestsc                 &    | j                         }~y r   )locktyper   locks     r   test_constructorzBaseLockTests.test_constructora   s    }}r   c                 \    | j                         }| j                  t        |      d       ~y )Nz<unlocked .* object (.*)?at .*>)rF   assertRegexreprrG   s     r   	test_reprzBaseLockTests.test_repre   s%    }}d%FGr   c                 |    | j                         }|j                          | j                  t        |      d       ~y )Nz<locked .* object (.*)?at .*>)rF   acquirerK   rL   rG   s     r   test_locked_reprzBaseLockTests.test_locked_reprj   s.    }}d%DEr   c                 F    | j                         }|j                          ~y r   )rF   rO   rG   s     r   test_acquire_destroyz"BaseLockTests.test_acquire_destroyp   s    }}r   c                 f    | j                         }|j                          |j                          ~y r   rF   rO   releaserG   s     r   test_acquire_releasez"BaseLockTests.test_acquire_releaseu   s"    }}r   c                     | j                         }| j                  |j                  d             |j                          y NF)rF   
assertTruerO   rU   rG   s     r   test_try_acquirezBaseLockTests.test_try_acquire{   s+    }}U+,r   c                     | j                         j                          g fd}t        |d      j                          | j	                  d          j                          y )Nc                  F    j                   j                  d             y rX   r   rO   rH   results   r   r   z3BaseLockTests.test_try_acquire_contended.<locals>.f   s    MM$,,u-.r      r   )rF   rO   r   r,   assertFalserU   r   r   rH   r_   s     @@r   test_try_acquire_contendedz(BaseLockTests.test_try_acquire_contended   sN    }}	/a%%'#r   c                 t   | j                         j                          d}fd}t        ||      }|j                          t	                | j                  t        |j                        d       j                          |j                          | j                  t        |j                        |       y )N   c                  F     j                           j                          y r   rO   rU   rH   s   r   r   z/BaseLockTests.test_acquire_contended.<locals>.f       LLNLLNr   r   )
rF   rO   r   r)   r   assertEqualr'   r   rU   r,   )r   Nr   brH   s       @r   test_acquire_contendedz$BaseLockTests.test_acquire_contended   s    }}	 !QK	QZZ!,	QZZ!,r   c                     | j                         fd}dfd	} |        t        |d      j                          | j                  t        |t               t        |d      j                          y )Nc                  F     j                           j                          y r   rg   rh   s   r   r   z"BaseLockTests.test_with.<locals>.f   ri   r   c                 >    5  | | 	 d d d        y # 1 sw Y   y xY wr   r   )errrH   s    r   _withz&BaseLockTests.test_with.<locals>._with   s*     ?I #  s   r`   r   )rF   r   r,   assertRaises	TypeError)r   r   rr   rH   s      @r   	test_withzBaseLockTests.test_with   sU    }}		 	a%%')UI6a%%'r   c                 d   | j                         fd}t        t        j                               }t	        |d      j                          t        t        j                               |k7  rCt        j                  d       | j                  |t        t        j                                      y y )Nc                  F     j                           j                          y r   rg   rh   s   r   r   z)BaseLockTests.test_thread_leak.<locals>.f   ri   r      g?)	rF   r'   r   	enumerater   r,   r	   r
   rj   )r   r   r   rH   s      @r   test_thread_leakzBaseLockTests.test_thread_leak   s     }}	 	##%& 	a&&(y""$%*
 JJsOQI$7$7$9 :; +r   c                    | j                         | j                  t        j                  dd       | j                  t        j                  d       | j                  t        j                  d       | j                  t        j                  t
        dz          j                  t
               j                          t        j                         }| j                  j                  d             t        j                         }| j                  ||z
  d       g fd}t        |d      j                          | j                  d          | j                  d   d	       y )
NFr`   itimeoutg}Ô%ITre   c                      t        j                         } j                  j                  d             t        j                         }j                  || z
         y )N      ?r|   )r	   	monotonicr   rO   )t1t2rH   resultss     r   r   z%BaseLockTests.test_timeout.<locals>.f   sB    !BNN4<<<45!BNN27#r   r   r   )rF   rs   
ValueErrorrO   OverflowErrorr   rU   r	   r   rY   r?   r   r,   ra   rB   )r   r   r   r   rH   r   s       @@r   test_timeoutzBaseLockTests.test_timeout   s   }}*dllE1=*dllDA-uE-{QO[)^^Q/0^^R#	$
 	a%%'$71:s+r   c                 z    | j                         }t        j                  |      }| j                   |              y r   )rF   weakrefrefassertIsNotNoner   rH   r   s      r   test_weakref_existsz!BaseLockTests.test_weakref_exists   s+    }}kk$SU#r   c                     | j                         }t        j                  |      }~t        j                          | j                   |              y r   )rF   r   r   gccollectassertIsNoner   s      r   test_weakref_deletedz"BaseLockTests.test_weakref_deleted   s7    }}kk$


#% r   N)r0   r1   r2   rI   rM   rP   rR   rV   rZ   rc   rm   ru   rz   r   r   r   r   r   r   rD   rD   \   sH    


- ( <&,4$
!r   rD   c                   0    e Zd Z	 d Zd Zd Zed        Zy)	LockTestsc                    | j                         g fd}t        j                         5  t        |d       t	              dk(  rt                t	              dk(  rt                | j                  t	              d       j                          t	              dk(  rt                t	              dk(  r| j                  t	              d       d d d        y # 1 sw Y   y xY w)Nc                       j                          j                  d         j                          j                  d        y r   rO   r   )rH   phases   r   r   z#LockTests.test_reacquire.<locals>.f   s-    LLNLLLLNLLr   r   r   r`      )rF   r   r   r   r'   r   rj   rU   )r   r   rH   r   s     @@r   test_reacquirezLockTests.test_reacquire   s    }}	 //1 		,Q#e*/ e*/GSZ+LLNe*/ e*/SZ+		, 		, 		,s   3C##AC#?C##C,c                     | j                         j                          fd}t        |d      }|j                          j                          j	                          y )Nc                  &     j                          y r   )rU   rh   s   r   r   z*LockTests.test_different_thread.<locals>.f      LLNr   r`   )rF   rO   r   r,   rU   r   r   rl   rH   s      @r   test_different_threadzLockTests.test_different_thread   sE    }}	!QK	r   c                 &   | j                         }|j                          | j                  |j                  d             |j                          | j                  |j	                                | j                  |j                  d             y )Nr   r|   F)blocking)rF   rO   ra   rU   lockedrY   rG   s     r   test_state_after_timeoutz"LockTests.test_state_after_timeout
  se     }}d34'e45r   c                     d }| j                         }|j                           ||       | j                         }|j                          |j                           ||       y )Nc                 D    | j                          | j                          y r   rg   rh   s    r   use_lockz/LockTests.test_at_fork_reinit.<locals>.use_lock  s     LLNLLNr   )rF   _at_fork_reinitrO   )r   r   rH   lock2s       r   test_at_fork_reinitzLockTests.test_at_fork_reinit  sP    	 }} r   N)r0   r1   r2   r   r   r   requires_forkr   r   r   r   r   r      s*    ,,	6  r   r   c                   ,    e Zd Z	 d Zd Zd Zd Zd Zy)
RLockTestsc                     | j                         }|j                          |j                          |j                          |j                          |j                          |j                          y r   rT   rG   s     r   r   zRLockTests.test_reacquire,  sC    }}r   c                 d   | j                         }| j                  t        |j                         |j	                          |j	                          |j                          |j	                          |j                          |j                          | j                  t        |j                         y r   )rF   rs   RuntimeErrorrU   rO   rG   s     r   test_release_unacquiredz"RLockTests.test_release_unacquired5  sk    }},5,5r   c                 d   | j                         }| j                  t        |j                         |j	                          |j	                          |j                          |j	                          |j                          |j                          | j                  t        |j                         y r   )rF   rs   r   _release_saverO   rU   rG   s     r   test_release_save_unacquiredz'RLockTests.test_release_save_unacquiredA  so    }},(:(:;,(:(:;r   c                     | j                         fd}t        |dd      }	 | j                  t        j                         |j                          |j                          y # |j                          w xY w)Nc                  &     j                          y r   )rO   rh   s   r   r   z+RLockTests.test_different_thread.<locals>.fP  r   r   r`   T)rF   r   rs   r   rU   r/   r,   r   s      @r   r   z RLockTests.test_different_threadM  s\    }}	!Q	lDLL9KKM	 KKMs    A& &A8c                 J   | j                         | j                  j                                j                          | j	                  j                                j                          | j	                  j                                g fd}t        |d      j                          | j                  d          j                          | j	                  j                                j                          | j                  j                                y )Nc                  D    j                   j                                y r   )r   	_is_ownedr^   s   r   r   z$RLockTests.test__is_owned.<locals>.fa  s    MM$..*+r   r`   r   )rF   ra   r   rO   rY   r   r,   rU   rb   s     @@r   test__is_ownedzRLockTests.test__is_ownedY  s    }})*()()	,a%%'#())*r   N)r0   r1   r2   r   r   r   r   r   r   r   r   r   r   (  s     
6
<
+r   r   c                   B    e Zd Z	 d Zd Zd Zd Zd Zed        Z	d Z
y)	
EventTestsc                    | j                         }| j                  |j                                |j                          | j	                  |j                                |j                          | j	                  |j                                |j                          | j                  |j                                |j                          | j                  |j                                y r   )	eventtypera   is_setsetrY   clearr   evts     r   test_is_setzEventTests.test_is_setp  s    nn&	

%	

%		&		&r   c                 >   d}g g fd}t        ||      }|j                          t                | j                  t	              d       j                          |j                          | j                  dg|z         | j                  dg|z         y )Nre   c                      j                   j                                j                   j                                y r   r   wait)r   results1results2s   r   r   z#EventTests._check_notify.<locals>.f  s'    OOCHHJ'OOCHHJ'r   r   T)r   r)   r   rj   r'   r   r,   )r   r   rk   r   rl   r   r   s    `   @@r   _check_notifyzEventTests._check_notify|  s    	( !QK	X*		D6A:.D6A:.r   c                     | j                         }| j                  |       |j                          |j                          | j                  |       y r   )r   r   r   r   r   s     r   test_notifyzEventTests.test_notify  s<    nn3			3r   c                    | j                         g g d}fd}t        ||      j                          | j                  dg|z         D ](  \  }}| j	                  |       | j                  |d       * g g j                          t        ||      j                          | j                  dg|z         D ]  \  }}| j                  |        y )Nre   c                      j                  j                  d             t        j                         } j                  d      }t        j                         }j                  ||| z
  f       y )Ng        r   )r   r   r	   r   )r   rr   r   r   r   s      r   r   z"EventTests.test_timeout.<locals>.f  sP    OOCHHSM*!BA!BOOQRL)r   Fr   T)r   r   r,   rj   ra   rB   r   rY   )r   rk   r   r   dtr   r   r   s        @@@r   r   zEventTests.test_timeout  s    nn	* 	a%%'E7Q;/ 	(EArQr3'	( 	a%%'D6A:. 	EArOOA	r   c                 2   | j                         g dd}fd}t        ||      }|j                          t        j                         j                          j                          |j                          | j                  dg|z         y )Ng      ?re   c                  L    j                   j                  dz               y N   r   )r   r   r}   s   r   r   z(EventTests.test_set_and_clear.<locals>.f  s    NN388GaK01r   T)	r   r   r)   r	   r
   r   r   r,   rj   )r   rk   r   rl   r   r   r}   s       @@@r   test_set_and_clearzEventTests.test_set_and_clear  s|     nn	2!QK	

7				4&1*-r   c                 p   | j                         }|j                  5  | j                  |j                  j                  d             d d d        |j	                          |j                  5  | j                  |j                  j                  d             d d d        y # 1 sw Y   YxY w# 1 sw Y   y xY wrX   )r   _condra   rO   r   r   s     r   r   zEventTests.test_at_fork_reinit  s     nnYY 	7SYY..u56	7YY 	7SYY..u56	7 	7	7 	7	7 	7s   +B ,+B, B),B5c                     | j                         }| j                  t        |      d       |j                          | j                  t        |      d       y )Nz<\w+\.Event at .*: unset>z<\w+\.Event at .*: set>)r   rK   rL   r   r   s     r   rM   zEventTests.test_repr  sA    nnc$@A	c$>?r   N)r0   r1   r2   r   r   r   r   r   r   r   rM   r   r   r   r   r   k  s:    
'/" 2." 7 7@r   r   c                   >    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
y	)
ConditionTestsc                 |   | j                         }|j                          |j                          |j                          |j                          t        j                         }| j                  |      }|j                          | j                  |j                  d             |j                          | j                  |j                  d             | j                  |j                  d             |j                          |5  | j                  |j                  d             d d d        y # 1 sw Y   y xY wrX   )condtyperO   rU   r   Lockra   rY   )r   condrH   s      r   test_acquirezConditionTests.test_acquire  s    }} 	~~}}T"e,-U+,e,- 	2T\\%01	2 	2 	2s   !D22D;c                 d    | j                         }| j                  t        |j                         y r   )r   rs   r   r   r   r   s     r   test_unacquired_waitz#ConditionTests.test_unacquired_wait  s!    }},		2r   c                 d    | j                         }| j                  t        |j                         y r   )r   rs   r   notifyr   s     r   test_unacquired_notifyz%ConditionTests.test_unacquired_notify  s!    }},4r   c                 j   d}g g g dfd}t        ||      }|j                          t              dk  rt                t              dk  rj	                          | j                  g        j                          j                  d       t                dj                          t              dk  rt                t              dk  r| j                  dgdz         | j                  g        t              dk  rt                t              dk  rj                          j                  d       t                dj                          t              t              z   dk  r%t                t              t              z   dk  r%| j                  dgdz  d	gdz  z          | j                  d	gdz         t              dk  rt                t              dk  rj                          j                          t                dj                          t              dk  rt                t              dk  r| j                  dgdz  d	gdz  z          | j                  d	gdz  d
gdz  z          |j                          y )Nre   r   c                  V   j                          j                         j                         } j                          j                  | f       j                          j                         j                         } j                          j                  | f       y r   )rO   r   r   rU   )r_   r   	phase_numreadyr   r   s    r   r   z'ConditionTests._check_notify.<locals>.f  sw    LLNLL#YY[FLLNOOVY/0LLNLL#YY[FLLNOOVY/0r      r`   )Tr`   r      )Tr   )Tr   )r   r)   r'   r   r   rj   rO   r   rU   
notify_allr,   )	r   r   rk   r   rl   r   r   r   r   s	    `   @@@@r   r   zConditionTests._check_notify  sE    	
	1 
	1 !QK	 %j1nG %j1n2&A	(maG (maI;?32&%j1nG %j1n 	A	(mc(m+a/G (mc(m+a/I;?i[1_#DEI;?3%j1nG %j1n 		(maG (maI;?hZ!^#CDI;?i[1_#DE	r   c                 h    | j                         }| j                  |       | j                  |       y r   )r   r   r   s     r   r   zConditionTests.test_notify:  s)    }}4 4 r   c                     | j                         g d}fd}t        ||      j                          | j                  t	              |       D ](  \  }}| j                  |d       | j                  |       * y )Nre   c                      j                          t        j                         } j                  d      }t        j                         }j	                          j                  || z
  |f       y )Nr   )rO   r	   r   r   rU   r   )r   r_   r   r   r   s      r   r   z&ConditionTests.test_timeout.<locals>.fD  sO    LLN!BYYs^F!BLLNNNBGV,-r   r   )r   r   r,   rj   r'   rB   ra   )r   rk   r   r   r_   r   r   s        @@r   r   zConditionTests.test_timeout@  sx    }}	. 	a%%'Wq)! 	%JBr3' V$	%r   c                 6     j                         d fd}t        |d      }|j                          t        d      D ]7  }t	        j
                  d       5  dz  j                          d d d        9 |j                          y # 1 sw Y   TxY w)Nr   c                      5  j                  fd      } j                  |        j                  d       d d d        y # 1 sw Y   y xY w)Nc                       dk(  S r   r   states   r   <lambda>z8ConditionTests.test_waitfor.<locals>.f.<locals>.<lambda>[      q r   r   )wait_forrY   rj   )r_   r   r   r   s    r   r   z&ConditionTests.test_waitfor.<locals>.fY  sF     +'89'  *+ + +s   8AAr`   r   r   )r   r   r)   r"   r	   r
   r   r,   )r   r   rl   r$   r   r   s   `   @@r   test_waitforzConditionTests.test_waitforV  s    }}	+
 !QK	q 	AJJt 
 	
 	
 s   BB	c                 t     j                         dg  fd}t        |d      }|j                          t        d      D ]7  }t	        j
                  d       5  dz  j                          d d d        9 |j                           j                  t              d       y # 1 sw Y   oxY w)Nr   c                     5  t        j                         } j                  fdd      }t        j                         | z
  } j                  |       j	                  | d       j                  d        d d d        y # 1 sw Y   y xY w)Nc                       dk(  S r   r   r   s   r   r   z@ConditionTests.test_waitfor_timeout.<locals>.f.<locals>.<lambda>n  r   r   g?r|   )r	   r   r   ra   rB   r   )r   r_   r   r   r   successs     r   r   z.ConditionTests.test_waitfor_timeout.<locals>.fk  su     %^^%'8#F^^%*  (""2s+t$% % %s   A6BBr`   r   r   )
r   r   r)   r"   r	   r
   r   r,   rj   r'   )r   r   rl   r$   r   r   r   s   `   @@@r   test_waitfor_timeoutz#ConditionTests.test_waitfor_timeoutg  s    }}	% !QK	q 	AJJt 
 	
 	
Wq)	 s   "B..B7	N)r0   r1   r2   r   r   r   r   r   r   r   r   r   r   r   r   r     s1    2&35HT!%,"*r   r   c                   J    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)BaseSemaphoreTestsc                     | j                  t        | j                  d       | j                  t        | j                  t        j                          y )N)value)rs   r   semtypesysmaxsizer(   s    r   rI   z#BaseSemaphoreTests.test_constructor  s:    *dllB?*dllS[[LIr   c                    | j                  d      }|j                          |j                          | j                  d      }|j                          |j                          |j                          |j                          y )Nr`   r   )r  rO   rU   r   sems     r   r   zBaseSemaphoreTests.test_acquire  sR    ll1oll1or   c                 F    | j                         }|j                          ~y r   )r  rO   r  s     r   rR   z'BaseSemaphoreTests.test_acquire_destroy  s    llnr   c                 @  	 | j                  d      j                          d}g 	g g d	fd}t        |d      }|j                          t	              t	              z   dk  r%t                t	              t	              z   dk  r%| j                  z   dgdz         dt        d      D ]  }j                           t	              t	              z   dk  r%t                t	              t	              z   dk  r%| j                  t        z         dgdz  dgdz  z          dt        d      D ]  }j                           t	              t	              z   d	k  r%t                t	              t	              z   d	k  r%| j                  t        z         dgdz  dgdz  z   dgdz  z          | j                  j                  d
             j                          |j                          | j                  	dgdz         y )N   
   r   c                      j                  j                                j                          j                  j                                j                          y r   r]   )r   r   r   r  sem_resultss   r   r   z4BaseSemaphoreTests.test_acquire_contended.<locals>.f  sC    s{{}-OOI&s{{}-OOI&r      r`      r      FT   )r  rO   r   r)   r'   r   rj   r"   rU   sortedra   r,   )
r   rk   r   rl   r$   r   r   r   r  r  s
        @@@@@r   rm   z)BaseSemaphoreTests.test_acquire_contended  s   ll1o		' 	'
 !RL	(mc(m+a/G (mc(m+a/H,qcAg6	q 	AKKM	(mc(m+b0G (mc(m+b08 34qcAga6GH	q 	AKKM	(mc(m+b0G (mc(m+b08 34qcAga6G1#PQ'6QRU+,	tf&>?r   c                    | j                  d      j                          g g dfd}t        |d      }|j                          t	              t	              z   dk  r%t                t	              t	              z   dk  r%| j                  z   dgdz         dj                  d       t	              t	              z   dk  r%t                t	              t	              z   dk  r%| j                  t        z         dgdz  dgdz  z          dj                  d       t	              t	              z   d	k  r%t                t	              t	              z   d	k  r%| j                  t        z         dgdz  dgdz  z   dgdz  z          | j                  j                  d
             j                          |j                          y )Nr
  r   c                      j                          j                          j                          j                          y r   r   )r   r   r   r  s   r   r   z/BaseSemaphoreTests.test_multirelease.<locals>.f  s-    KKMOOI&KKMOOI&r   r  r  r`   r  r   r  F)r  rO   r   r)   r'   r   rj   rU   r  ra   r,   )r   r   rl   r   r   r   r  s      @@@@r   test_multireleasez$BaseSemaphoreTests.test_multirelease  s   ll1o		'
 !RL	(mc(m+a/G (mc(m+a/H,qcAg6	A(mc(m+b0G (mc(m+b08 34qcAga6GH	A(mc(m+b0G (mc(m+b08 34qcAga6G1#PQ'6QRU+,	r   c                 F   | j                  d      }| j                  |j                  d             | j                  |j                  d             | j                  |j                  d             |j	                          | j                  |j                  d             y )Nr   F)r  rY   rO   ra   rU   r  s     r   rZ   z#BaseSemaphoreTests.test_try_acquire  sn    ll1oE*+E*+U+,E*+r   c                     | j                  d      j                          g fd}t        |d      j                          | j	                  t              dgdz  dgdz  z          y )Nr   c                       j                  j                  d              j                  j                  d             y rX   r]   )r   r  s   r   r   z8BaseSemaphoreTests.test_try_acquire_contended.<locals>.f  s-    NN3;;u-.NN3;;u-.r   re   Fr
  Tr   )r  rO   r   r,   rj   r  )r   r   r   r  s     @@r   rc   z-BaseSemaphoreTests.test_try_acquire_contended  s^    ll1o	/ 	a%%' 	5'A+!*CEr   c                 P   | j                  d      }| j                  t        |j                  dd       | j	                  |j                  d             | j	                  |j                  d             | j                  |j                  d             |j                          | j	                  |j                  d             t        j                         }| j                  |j                  d             t        j                         |z
  }| j                  |d       y )Nr   F      ?r|   g{Gzt?r   )
r  rs   r   rO   rY   ra   rU   r	   r   rB   )r   r  tr   s       r   test_acquire_timeoutz'BaseSemaphoreTests.test_acquire_timeout  s    ll1o*ckk5#FE23E23U34E23NNS12^^!2s#r   c                    | j                         j                          fd}t        |d      }|j                          t	                | j                  |j                         j                          |j                          y )Nc                  F     j                           j                          y r   rg   )r  s   r   r   z0BaseSemaphoreTests.test_default_value.<locals>.f  s    KKMKKMr   r`   )	r  rO   r   r)   r   ra   r   rU   r,   )r   r   rl   r  s      @r   test_default_valuez%BaseSemaphoreTests.test_default_value  sa    lln	 !QK	$	r   c                 <     j                  d      d fd	} |         j                  j                  d             j                           j	                  t
        |t
                j                  j                  d             j                          y )Nr   c                    5  j                  j                  d             j                          5  j                  j                  d             | r| 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wrX   )rY   rO   rU   ra   )rq   r   r  s    r   rr   z+BaseSemaphoreTests.test_with.<locals>._with  sz     "E 23 "$$S[[%78!	 "" "" "" "s"   3A:%A.A:.A7	3A::BFr   )r  rY   rO   rU   rs   rt   )r   rr   r  s   ` @r   ru   zBaseSemaphoreTests.test_with  sj    ll1o	" 	E*+)UI6E*+r   N)r0   r1   r2   rI   r   rR   rm   r  rZ   rc   r  r  ru   r   r   r   r   r     s>    J
#@J@,F$r   r   c                       e Zd Z	 d Zd Zy)SemaphoreTestsc                     | j                  d      }|j                          |j                          |j                          |j                          y Nr`   )r  rU   rO   r  s     r   r   z&SemaphoreTests.test_release_unacquired"  s3    ll1or   c                 (   | j                  d      }| j                  t        |      d       |j                          | j                  t        |      d       |j	                          |j	                          | j                  t        |      d       y )Nr   z<\w+\.Semaphore at .*: value=3>z<\w+\.Semaphore at .*: value=2>z<\w+\.Semaphore at .*: value=4>)r  rK   rL   rO   rU   r  s     r   rM   zSemaphoreTests.test_repr*  si    ll1oc$FGc$FGc$FGr   Nr0   r1   r2   r   rM   r   r   r   r#  r#    s    Hr   r#  c                       e Zd Z	 d Zd Zy)BoundedSemaphoreTestsc                     | j                         }| j                  t        |j                         |j	                          |j                          | j                  t        |j                         y r   )r  rs   r   rU   rO   r  s     r   r   z-BoundedSemaphoreTests.test_release_unacquired9  sG    lln*ckk2*ckk2r   c                     | j                  d      }| j                  t        |      d       |j                          | j                  t        |      d       y )Nr   z(<\w+\.BoundedSemaphore at .*: value=3/3>z(<\w+\.BoundedSemaphore at .*: value=2/3>)r  rK   rL   rO   r  s     r   rM   zBoundedSemaphoreTests.test_reprA  sB    ll1oc$OPc$OPr   Nr'  r   r   r   r)  r)  4  s    3Qr   r)  c                   r    e Zd Z	 dZdZd Zd Zd Zd ZddZ	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zy)BarrierTestsre   g       @c                 \    | j                  | j                  | j                        | _        y )Nr|   )barriertyperk   defaultTimeoutbarrierr(   s    r   r8   zBarrierTests.setUpO  s#    ''8K8K'Lr   c                 8    | j                   j                          y r   )r1  abortr(   s    r   r<   zBarrierTests.tearDownQ  s    r   c                 d    t        || j                  dz
        } |        |j                          y r%  )r   rk   r,   )r   r   rl   s      r   run_threadszBarrierTests.run_threadsT  s'    !TVVAX		r   c                 `   | j                   j                  }| j                  || j                         t	        |      D ]  }|d   j                  d       | j                  t        |d         ||z         | j                   j                          |d   j                  d       | j                  t        |d         |dz   |z         | j                   j                           | j                  | j                   j                  d       | j                  | j                   j                         y )Nr   Tr`   )r1  partiesrj   rk   r"   r   r'   r   	n_waitingra   broken)r   r   r   mr$   s        r   	multipasszBarrierTests.multipassY  s    LL  DFF#q 	 AAJd#S_a!e4LLAJd#S_q1uk:LL	  	//3,,-r   c                 D     	 g g g fd} j                  |       y )Nc                  *    j                          y r   )r;  )passesr   r   s   r   r   z$BarrierTests.test_barrier.<locals>.fk  s    NN7F+r   r5  )r   r>  r   r   s   `` @r   test_barrierzBarrierTests.test_barrierf  s&    	 b'	,r   c                 &    	 | j                  d      S )Nr  )r@  r(   s    r   test_barrier_10zBarrierTests.test_barrier_10o  s    	   $$r   c                      	 g  fd} j                  |        j                  t              t        t         j                                     y )Nc                  \    j                   j                         } j                  |        y r   )r1  r   r   )r   r   r   s    r   r   z(BarrierTests.test_wait_return.<locals>.fz  s!    !!#ANN1r   )r5  rj   sumr"   rk   )r   r   r   s   ` @r   test_wait_returnzBarrierTests.test_wait_returnu  sE    	 	 	Ws5='9:r   c                      	 g fd} j                   j                  |       fd} j                  |       y )Nc                  (     j                  d       y r.   )r   )r   s   r   actionz(BarrierTests.test_action.<locals>.action  s    NN4 r   c                  \     j                          j                  t              d       y r%  )r   rj   r'   )r1  r   r   s   r   r   z#BarrierTests.test_action.<locals>.f  s     LLNS\1-r   r/  rk   r5  )r   rI  r   r1  r   s   `  @@r   test_actionzBarrierTests.test_action  s?    	 	!""46662	. 	r   c                     	 g g  fd} j                  |        j                  t              d        j                  t               j                  dz
          j	                   j
                  j                         y )Nc                  ^   	 j                   j                         } | j                  dz  k(  rt        j                   j                          j	                  d       y # t
        j                  $ r j	                  d       Y y t        $ r j                   j                          Y y w xY wNr   T)r1  r   rk   r   r   r   BrokenBarrierErrorr3  )r$   r   r   r   s    r   r   z"BarrierTests.test_abort.<locals>.f  s    
LL%%'	>&&!!#%// &% ""$s   AA! !$B,"B,+B,r   r`   )r5  rj   r'   rk   rY   r1  r9  )r   r   r   r   s   ` @@r   
test_abortzBarrierTests.test_abort  so    	 	 	X*Xq1++,r   c                     	 g g g  fd} j                  |        j                  t              d        j                  t               j                  dz
          j                  t               j                         y )Nc                  Z   j                   j                         } | j                  dz  k(  r}j                   j                  j                  dz
  k  r<t	        j
                  d       j                   j                  j                  dz
  k  r<j                   j                          n,	 j                   j                          j                  d       j                   j                          j                  d       y # t        j                  $ r j                  d       Y Rw xY w)Nr   r`   gMbP?T)
r1  r   rk   r8  r	   r
   resetr   r   rP  )r$   r   r   results3r   s    r   r   z"BarrierTests.test_reset.<locals>.f  s    !!#ADFFAI~ll,,tvvax7JJu% ll,,tvvax7""$*LL%%'OOD) LLOOD!	 !33 *OOD)*s   ,+D $D*)D*r   r`   )r5  rj   r'   rk   )r   r   r   r   rU  s   ` @@@r   
test_resetzBarrierTests.test_reset  sv    	 	"" 	X*Xq1X/r   c                 V    	 g g g  j                   j                         fd} j                  |        j                  t	              d        j                  t	               j                  dz
          j                  t	               j                         y )Nc                  H   	 j                   j                         } | j                  dz  k(  rt        j                   j                          j	                  d       j                         j                  dz  k(  rj                   j                          j                          j                   j                          j	                  d       y # t
        j                  $ r j	                  d       Y t        $ r j                   j                          Y w xY wrO  )	r1  r   rk   r   r   r   rP  r3  rT  )r$   barrier2r   r   rU  r   s    r   r   z,BarrierTests.test_abort_and_reset.<locals>.f  s    
LL%%'	>&&!!#% }}$&&!)+""$MMOLLOOD! // &% ""$s   AC $D!<"D! D!r   r`   )r/  rk   r5  rj   r'   )r   r   rY  r   r   rU  s   ` @@@@r   test_abort_and_resetz!BarrierTests.test_abort_and_reset  s    	 ##DFF+	" 	"* 	X*Xq1X/r   c                 4     	  fd} j                  |       y )Nc                      j                   j                         } | j                  dz  k(  rt        j                  d       j                  t        j                  j                   j                  d       y )Nr   r  r   )r1  r   rk   r	   r
   rs   r   rP  )r$   r   s    r   r   z$BarrierTests.test_timeout.<locals>.f  sU    !!#ADFFaK

3i::"ll//6r   r?  )r   r   s   ` r   r   zBarrierTests.test_timeout  s    		6 	r   c                 r     	  j                   j                  d       fd} j                  |       y )Ng333333?r|   c                      j                         } | j                  dz  k(  rt        j                  d       j	                  t
        j                  j                          y )Nr   r  )r   rk   r	   r
   rs   r   rP  )r$   r1  r   s    r   r   z,BarrierTests.test_default_timeout.<locals>.f  sC    ADFFaK

3i::GLLIr   rK  )r   r   r1  s   ` @r   test_default_timeoutz!BarrierTests.test_default_timeout  s9    	 ""4663"7	J 	r   c                 f    | j                  d      }|j                          |j                          y r%  )r/  r   )r   rl   s     r   test_single_threadzBarrierTests.test_single_thread  s$    Q		r   c                    | j                  d      | j                  t              d       fd}t        |d      }|j	                          t        j                  d       | j                  t              d       j                  d       |j                          | j                  t              d       j                          | j                  t              d       y )Nr   z!<\w+\.Barrier at .*: waiters=0/3>c                  (     j                  d       y )Nr   )r   )rl   s   r   r   z!BarrierTests.test_repr.<locals>.f  s    FF1Ir   r   g?z!<\w+\.Barrier at .*: waiters=2/3>z<\w+\.Barrier at .*: broken>)
r/  rK   rL   r   r)   r	   r
   r   r,   r3  )r   r   bunchrl   s      @r   rM   zBarrierTests.test_repr  s    Qa"FG	a 

3a"FG	q	!a"FG		a"ABr   N)r`   )r0   r1   r2   rk   r0  r8   r<   r5  r;  r@  rB  rF  rL  rQ  rV  rZ  r   r_  ra  rM   r   r   r   r-  r-  H  sa     	
ANM
.%
;-00< 0D
Cr   r-  )r   r  r	   _threadr   r   r   unittestr   testr   test.supportr   
skipUnlesshas_fork_supportr   r   objectr   TestCaser4   rD   r   r   r   r   r   r#  r)  r-  r   r   r   <module>rm     s    
 
  1     ) $##G$<$<%CD
.F .b18$$ 1"E!L E!PA AH@+ @+Fb@ b@Jl*\ l*^\ \|H' H.Q. Q(MC< MCr   