o
    gg                     @   s   d dl mZ edZddlZddlZddlZddlm	Z	 ddl
mZ ddlmZ G dd	 d	Zd
d e D Zejeejed\ZZG dd dZdd e D Zejeeed\ZZG dd dZejeed\ZZejdd Zedkr~e  dS dS )   )util	importlib    N)support)threading_helper)
lock_testsc                   @   s8   e Zd Zedd ZdZdZdZdZdZ	dZ
dZdZdS )ModuleLockAsRLockTestsc                 C   s
   |  dS )NZ	some_lockLockType)cls r   T/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_importlib/test_locks.py<lambda>   s   
 zModuleLockAsRLockTests.<lambda>N)__name__
__module____qualname__classmethodZlocktypeZtest__is_ownedZtest_try_acquireZtest_try_acquire_contendedZ	test_withZtest_timeoutZtest_release_save_unacquiredZ	test_reprZtest_locked_reprr   r   r   r   r      s    r   c                 C      i | ]	\}}||j jqS r   )
_bootstrap_ModuleLock.0kindZ	splitinitr   r   r   
<dictcomp>        r   r	   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )DeadlockAvoidanceTestsc                 C   s6   zt  | _td W d S  ty   d | _Y d S w )Ngư>)sysgetswitchintervalold_switchintervalr   setswitchintervalAttributeErrorselfr   r   r   setUp+   s   
zDeadlockAvoidanceTests.setUpc                 C   s   | j d urt| j  d S d S N)r   r   r   r!   r   r   r   tearDown2   s   
zDeadlockAvoidanceTests.tearDownc                    s   d fddt  D  fddt  D |r }n d }t|g fddfdd	}t||  t| S )
N
   c                    s   g | ]	}  t|qS r   )r
   strr   ir!   r   r   
<listcomp>8   s    zFDeadlockAvoidanceTests.run_deadlock_avoidance_test.<locals>.<listcomp>c                    s$   g | ]}| |d     fqS )r   r   r(   )NLOCKSlocksr   r   r*   9   s   $ r   c                    s&   z|    W dS   jy   Y dS w )zOTry to acquire the lock. Return True on success,
            False on deadlock.FTN)acquireDeadlockError)lockr!   r   r   _acquireA   s   
zDDeadlockAvoidanceTests.run_deadlock_avoidance_test.<locals>._acquirec                     sR     \} } | }   |}||f |r|  |r'|   d S d S r$   )popwaitappendrelease)abZrarb)r0   barrierpairsresultsr   r   fK   s   z=DeadlockAvoidanceTests.run_deadlock_avoidance_test.<locals>.f)range	threadingBarrierr   ZBunchZwait_for_finishedassertEquallen)r"   Zcreate_deadlockZNTHREADSr;   r   )r+   r0   r8   r,   r9   r:   r"   r   run_deadlock_avoidance_test6   s   


z2DeadlockAvoidanceTests.run_deadlock_avoidance_testc                 C   s>   |  d}|d}| |d | |dt||  d S )NTTFr   TT)rA   countZassertGreaterEqualr?   r@   )r"   r:   Znb_deadlocksr   r   r   test_deadlockY   s   

z$DeadlockAvoidanceTests.test_deadlockc                 C   s6   |  d}| |dd | |dt| d S )NFrB   r   rC   )rA   r?   rD   r@   )r"   r:   r   r   r   test_no_deadlockb   s   
z'DeadlockAvoidanceTests.test_no_deadlockN)r   r   r   r#   r%   rA   rE   rF   r   r   r   r   r   )   s    #	r   c                 C   r   r   )r   _DeadlockErrorr   r   r   r   r   h   r   )r
   r.   c                   @   s(   e Zd Zedd Zdd Zdd ZdS )LifetimeTestsc                 C   s   | j jS r$   )initr   r!   r   r   r   	bootstrapt   s   zLifetimeTests.bootstrapc                 C   sd   d}|  || jj | j|}| || jj t|}~t  |  || jj | 	|  d S )NZxyzzy)
ZassertNotInrJ   _module_locks_get_module_lockZassertInweakrefrefr   
gc_collectZassertIsNone)r"   namer/   wrr   r   r   test_lock_lifetimex   s   
z LifetimeTests.test_lock_lifetimec                 C   s&   t   | dt| jj| jj d S )Nr   )r   rO   r?   r@   rJ   rK   r!   r   r   r   test_all_locks   s   zLifetimeTests.test_all_locksN)r   r   r   propertyrJ   rR   rS   r   r   r   r   rH   r   s
    
rH   )rI   c                   C   s   t tttttt d S r$   )r   Zrun_unittestFrozen_ModuleLockAsRLockTestsSource_ModuleLockAsRLockTestsFrozen_DeadlockAvoidanceTestsSource_DeadlockAvoidanceTestsFrozen_LifetimeTestsSource_LifetimeTestsr   r   r   r   	test_main   s   r[   __main__) r   Z	test_utilZimport_importlibrI   r   r=   rM   testr   Ztest.supportr   r   r   itemsZ
LOCK_TYPESZ	test_bothZ
RLockTestsrU   rV   r   ZDEADLOCK_ERRORSrW   rX   rH   rY   rZ   Zreap_threadsr[   r   r   r   r   r   <module>   sH    

?
	
