Your IP : 216.73.216.196


Current Path : /opt/alt/python310/lib64/python3.10/test/__pycache__/
Upload File :
Current File : //opt/alt/python310/lib64/python3.10/test/__pycache__/lock_tests.cpython-310.opt-1.pyc

o

0�i�x�@s4dZddlZddlZddlZddlZddlmZmZddlZddl	Z	ddl
Z
ddlmZddl
mZe	�eed�d�Zdd	�ZGd
d�de�ZGdd
�d
e	j�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZdS) z/
Various tests for synchronization primitives.
�N)�start_new_thread�TIMEOUT_MAX)�support)�threading_helper�forkz9platform doesn't support fork (no _at_fork_reinit method)cCst�d�dS)N�{�G�z�?)�time�sleep�r
r
�6/opt/alt/python310/lib64/python3.10/test/lock_tests.py�_waitsrc@s2eZdZdZddd�Zdd�Zdd�Zd	d
�ZdS)
�Bunchz
    A bunch of threads.
    Fcsp��_|�_g�_g�_|�_t���_�j����fdd�}zt	|�D]}t
|d�q&WdSd�_�)z�
        Construct a bunch of `n` threads running the same function `f`.
        If `wait_before_exit` is True, the threads won't terminate until
        do_finish() is called.
        c	sdt��}�j�|�z��W�j�|��js t��jrdSdS�j�|��js1t��jr+w�N)�	threading�	get_ident�started�append�finished�	_can_exitr)�tid��f�selfr
r�task-s���zBunch.__init__.<locals>.taskr
TN)r�nrrrr�wait_threads_exit�wait_thread�	__enter__�ranger)rrrZwait_before_exitr�ir
rr�__init__s


�zBunch.__init__cCs.t|j�|jkrt�t|j�|jksdSdSr)�lenrrr�rr
r
r�wait_for_started>s�zBunch.wait_for_startedcCs:t|j�|jkrt�t|j�|jks|j�ddd�dSr)r!rrrr�__exit__r"r
r
r�wait_for_finishedBs�zBunch.wait_for_finishedcCs
d|_dS�NT)rr"r
r
r�	do_finishHs
zBunch.do_finishN)F)�__name__�
__module__�__qualname__�__doc__r r#r%r'r
r
r
rr
s
r
c@s$eZdZdd�Zdd�Zdd�ZdS)�BaseTestCasecCst��|_dSr)rZthreading_setup�_threadsr"r
r
r�setUpM�zBaseTestCase.setUpcCstj|j�t��dSr)rZthreading_cleanupr-rZ
reap_childrenr"r
r
r�tearDownPszBaseTestCase.tearDowncCs$|�||d�|�||d�dS)Ng333333�?g$@)ZassertGreaterEqual�
assertLess)rZactualZexpectedr
r
r�
assertTimeoutTszBaseTestCase.assertTimeoutN)r(r)r*r.r0r2r
r
r
rr,Lsr,c@sxeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�
BaseLockTestsz;
    Tests for both recursive and non-recursive locks.
    cCs|��}~dSr)�locktype�r�lockr
r
r�test_constructorbszBaseLockTests.test_constructorcCs|��}|�t|�d�~dS)Nz<unlocked .* object (.*)?at .*>)r4�assertRegex�reprr5r
r
r�	test_reprfszBaseLockTests.test_reprcCs&|��}|��|�t|�d�~dS)Nz<locked .* object (.*)?at .*>)r4�acquirer8r9r5r
r
r�test_locked_reprkszBaseLockTests.test_locked_reprcC�|��}|��~dSr)r4r;r5r
r
r�test_acquire_destroyq�z"BaseLockTests.test_acquire_destroycCs|��}|��|��~dSr�r4r;�releaser5r
r
r�test_acquire_releasevsz"BaseLockTests.test_acquire_releasecCs$|��}|�|�d��|��dS�NF)r4�
assertTruer;rAr5r
r
r�test_try_acquire|szBaseLockTests.test_try_acquirecsJ|������g���fdd�}t|d���|��d����dS)Ncs����d��dSrC�rr;r
�r6�resultr
rr�sz3BaseLockTests.test_try_acquire_contended.<locals>.f�r)r4r;r
r%�assertFalserA�rrr
rGr�test_try_acquire_contended�sz(BaseLockTests.test_try_acquire_contendedcsp|������d}�fdd�}t||�}|��t�|�t|j�d����|�	�|�t|j�|�dS)N�c�������dSr�r;rAr
�r6r
rr��z/BaseLockTests.test_acquire_contended.<locals>.fr)
r4r;r
r#r�assertEqualr!rrAr%�r�Nr�br
rPr�test_acquire_contended�s
z$BaseLockTests.test_acquire_contendedcsV|����fdd�}d�fdd�	}|�t|d���|�t|t�t|d���dS)NcrNrrOr
rPr
rr�rQz"BaseLockTests.test_with.<locals>.fcs6��|dur	|�Wd�dS1swYdSrr
��errrPr
r�_with�s
�"�z&BaseLockTests.test_with.<locals>._withrIr)r4r
r%�assertRaises�	TypeError)rrrYr
rPr�	test_with�szBaseLockTests.test_withcsd|����fdd�}tt���}t|d���tt���|kr0t�d�|�|tt����dSdS)NcrNrrOr
rPr
rr�rQz)BaseLockTests.test_thread_leak.<locals>.f�g�������?)	r4r!r�	enumerater
r%rr	rR)rrrr
rPr�test_thread_leak�s
�zBaseLockTests.test_thread_leakcs�|���|�t�jdd�|jt�jdd�|jt�jdd�|jt�jtdd��jtd����t��}|�	�jdd��t��}|�
||d�g���fdd�}t|d���|�
�d	�|��dd
�dS)NFrIi������timeoutg}Ô%�I�TrMcs4t��}���jdd��t��}��||�dS)N��?r`)r�	monotonicrr;)�t1�t2�r6�resultsr
rr�sz%BaseLockTests.test_timeout.<locals>.frrb)r4rZ�
ValueErrorr;�
OverflowErrorrrArrcrDr1r
r%rJr2)rrdrerr
rfr�test_timeout�s zBaseLockTests.test_timeoutcCs"|��}t�|�}|�|��dSr)r4�weakref�refZassertIsNotNone�rr6rlr
r
r�test_weakref_exists�s
z!BaseLockTests.test_weakref_existscCs,|��}t�|�}~t��|�|��dSr)r4rkrl�gcZcollectZassertIsNonermr
r
r�test_weakref_deleted�s

z"BaseLockTests.test_weakref_deletedN)r(r)r*r+r7r:r<r>rBrErLrVr\r_rjrnrpr
r
r
rr3]s
r3c@s4eZdZdZdd�Zdd�Zdd�Zedd	��Zd
S)�	LockTestszn
    Tests for non-recursive, weak locks
    (which can be acquired and released from different threads).
    cs�|���g���fdd�}t���Ct|d�t��dkr&t�t��dkst�|�t��d����t��dkrDt�t��dks;|�t��d�Wd�dS1sWwYdS)Ncs(�����d������d�dSr�r;rr
�r6Zphaser
rr��
z#LockTests.test_reacquire.<locals>.fr
rrI�)r4rrrr!rrRrArKr
rsr�test_reacquire�s 

��"�zLockTests.test_reacquirecsB|�������fdd�}t|d�}|��������dS)Nc����dSr)rAr
rPr
rr�z*LockTests.test_different_thread.<locals>.frI)r4r;r
r%rA�rrrUr
rPr�test_different_threads
zLockTests.test_different_threadcCsN|��}|��|�|jdd��|��|�|���|�|jdd��dS)Nrr`F)Zblocking)r4r;rJrA�lockedrDr5r
r
r�test_state_after_timeoutsz"LockTests.test_state_after_timeoutcCsDdd�}|��}|��||�|��}|��|��||�dS)NcSs|��|��dSrrOrPr
r
r�use_locksz/LockTests.test_at_fork_reinit.<locals>.use_lock)r4�_at_fork_reinitr;)rr}r6Zlock2r
r
r�test_at_fork_reinitszLockTests.test_at_fork_reinitN)	r(r)r*r+rvrzr|�
requires_forkrr
r
r
rrq�s
rqc@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�ZdS)
�
RLockTestsz$
    Tests for recursive locks.
    cCs<|��}|��|��|��|��|��|��dSrr@r5r
r
rrv-szRLockTests.test_reacquirecCsX|��}|�t|j�|��|��|��|��|��|��|�t|j�dSr)r4rZ�RuntimeErrorrAr;r5r
r
r�test_release_unacquired6�z"RLockTests.test_release_unacquiredcCsX|��}|�t|j�|��|��|��|��|��|��|�t|j�dSr)r4rZr��
_release_saver;rAr5r
r
r�test_release_save_unacquiredBr�z'RLockTests.test_release_save_unacquiredcsR|����fdd�}t|dd�}z
|�t�j�W|��n|��w|��dS)Ncrwr)r;r
rPr
rrQrxz+RLockTests.test_different_thread.<locals>.frIT)r4r
rZr�rAr'r%ryr
rPrrzNsz RLockTests.test_different_threadcs�|���|��������|��������|�����g���fdd�}t|d���|��d����|��������|�����dS)Ncs������dSr)r�	_is_ownedr
rGr
rrbsz$RLockTests.test__is_owned.<locals>.frIr)r4rJr�r;rDr
r%rArKr
rGr�test__is_ownedZszRLockTests.test__is_ownedN)	r(r)r*r+rvr�r�rzr�r
r
r
rr�)s	r�c@sDeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Ze	dd
��Z
dS)�
EventTestsz"
    Tests for Event objects.
    cCsr|��}|�|���|��|�|���|��|�|���|��|�|���|��|�|���dSr)�	eventtyperJZis_set�setrD�clear�r�evtr
r
r�test_is_setqszEventTests.test_is_setcs|d}g�g����fdd�}t||�}|��t�|�t��d����|��|��dg|�|��dg|�dS)NrMcs ������������dSr�r�waitr
�r��results1�results2r
rr�sz#EventTests._check_notify.<locals>.frT)r
r#rrRr!r�r%)rr�rTrrUr
r�r�
_check_notify}s
zEventTests._check_notifycCs0|��}|�|�|��|��|�|�dSr)r�r�r�r�r�r
r
r�test_notify�s

zEventTests.test_notifycs�|���g�g�d}���fdd�}t||���|��dg|��D]\}}|�|�|�|d�q$g�g����t||���|��dg|��D]	\}}|�|�qNdS)NrMcs@����d��t��}��d�}t��}��|||f�dS)Ngrb)rr�rrc)rd�rrer�r
rr�s

z"EventTests.test_timeout.<locals>.fFrbT)r�r
r%rRrJr2r�rD)rrTrr��dtr
r�rrj�s$
�zEventTests.test_timeoutcsn|���g�d�d}���fdd�}t||�}|��t���������|��|��dg|�dS)Ng�?rMcs�����d��dS�N�r�r
�r�rgrar
rr��z(EventTests.test_set_and_clear.<locals>.fT)	r�r
r#rr	r�r�r%rRrSr
r�r�test_set_and_clear�s

zEventTests.test_set_and_clearcCs�|��}|j�|�|j�d��Wd�n1swY|��|j�|�|j�d��Wd�dS1s<wYdSrC)r�Z_condrJr;r~r�r
r
rr�s�"�zEventTests.test_at_fork_reinitN)r(r)r*r+r�r�r�rjr�r�rr
r
r
rr�lsr�c@sPeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�ZdS)�ConditionTestsz(
    Tests for condition variables.
    cCs�|��}|��|��|��|��t��}|�|�}|��|�|�d��|��|�|�d��|�|�d��|��|�|�|�d��Wd�dS1sWwYdSrC)�condtyper;rArZLockrJrD)r�condr6r
r
r�test_acquire�s 
"�zConditionTests.test_acquirecC�|��}|�t|j�dSr)r�rZr�r��rr�r
r
r�test_unacquired_wait��z#ConditionTests.test_unacquired_waitcCr�r)r�rZr��notifyr�r
r
r�test_unacquired_notify�r�z%ConditionTests.test_unacquired_notifycsd}g�g�g�d������fdd�}t||�}|��t��dkr,t�t��dks#���|��g������d�t�d����t��dkrWt�t��dksN|��dgd�|��g�t��dkrut�t��dksl�����d�t�d����t��t��d	kr�t�t��t��d	ks�|��dgdd
gd�|��d
gd�t��dkr�t�t��dks������	�t�d����t��dkr�t�t��dks�|��dgdd
gd�|��d
gddgd�|�
�dS)NrMrcsd����������}�����|�f�����������}�����|�f�dSr)r;rr�rA�rH�r��	phase_numZreadyr�r�r
rr�s

z'ConditionTests._check_notify.<locals>.f�rI)TrIru�)Tru)Tr�)r
r#r!rr�rRr;r�rAZ
notify_allr%)rr�rTrrUr
r�rr��sd
�
��
���zConditionTests._check_notifycCs |��}|�|�|�|�dSr)r�r�r�r
r
rr�5s
zConditionTests.test_notifycsd|���g�d}��fdd�}t||���|�t��|��D]\}}|�|d�|�|�q dS)NrMcs@���t��}��d�}t��}�����|||f�dS)Nrb)r;rrcr�rAr)rdrHre�r�rgr
rr?s
z&ConditionTests.test_timeout.<locals>.frb)r�r
r%rRr!r2rJ)rrTrr�rHr
r�rrj;s�zConditionTests.test_timeoutc	s�����d����fdd�}t|d�}|��td�D]!}t�d����d7����Wd�n1s7wYq|��dS)NrcsR�����fdd��}��|����d�Wd�dS1s"wYdS)Nc��dkSr�r
r
��stater
r�<lambda>V�z8ConditionTests.test_waitfor.<locals>.f.<locals>.<lambda>r�)�wait_forrDrRr��r�rr�r
rrTs

"�z&ConditionTests.test_waitfor.<locals>.frIr�r)r�r
r#rrr	r�r%�rrrUrr
r�r�test_waitforQs


��zConditionTests.test_waitforc	s�����d�g�����fdd�}t|d�}|��td�D]!}t�d����d7����Wd�n1s:wYq|����t	��d�dS)Nrcst��.t��}�j�fdd�dd�}t��|}��|���|d���d�Wd�dS1s3wYdS)Ncr�r�r
r
r�r
rr�ir�z@ConditionTests.test_waitfor_timeout.<locals>.f.<locals>.<lambda>g�������?r`)rrcr�rJr2r)r�rH�r�rr�Zsuccessr
rrfs
"�z.ConditionTests.test_waitfor_timeout.<locals>.frIr�r)
r�r
r#rrr	r�r%rRr!r�r
r�r�test_waitfor_timeoutbs


��z#ConditionTests.test_waitfor_timeoutN)r(r)r*r+r�r�r�r�r�rjr�r�r
r
r
rr��sJr�c@s`eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dS)�BaseSemaphoreTestszB
    Common tests for {bounded, unbounded} semaphore objects.
    cCs,|jt|jdd�|jt|jtjd�dS)N���)�value)rZrh�semtype�sys�maxsizer"r
r
rr7sz#BaseSemaphoreTests.test_constructorcCsH|�d�}|��|��|�d�}|��|��|��|��dS)NrIru)r�r;rA�r�semr
r
rr��s

zBaseSemaphoreTests.test_acquirecCr=r)r�r;r�r
r
rr>�r?z'BaseSemaphoreTests.test_acquire_destroycs�|�d�����d}g�g�g�d������fdd�}t|d�}|��t��t��dkr=t�t��t��dks0|���dgd�d�td�D]}���qNt��t��dkrlt�t��t��dks_|�t	���dgddgd�d	�td�D]}���q�t��t��d
kr�t�t��t��d
ks�|�t	���dgddgdd	gd�|�
��d�����|��|��dgd
�dS)N��
rcs4��������������������dSrrFr
�r�r�r�r�Zsem_resultsr
rr�s
z4BaseSemaphoreTests.test_acquire_contended.<locals>.f�rI�
ru�FT�)r�r;r
r#r!rrRrrA�sortedrJr%)rrTrrUrr
r�rrV�s@

�
�$
�.z)BaseSemaphoreTests.test_acquire_contendedcst|�d�����g�g�d�����fdd�}t|d�}|��t��t��dkr8t�t��t��dks+|���dgd�d���d�t��t��dkrat�t��t��dksT|�t���dgddgd�d	���d�t��t��d
kr�t�t��t��d
ks�|�t���dgddgdd	gd�|�	��d�����|�
�dS)Nr�rcs(��������������dSrrrr
�r�r�r�r�r
rr�rtz/BaseSemaphoreTests.test_multirelease.<locals>.fr�r�rIr�rur�F)r�r;r
r#r!rrRrAr�rJr%ryr
r�r�test_multirelease�s6

�
�$
�.z$BaseSemaphoreTests.test_multireleasecCsV|�d�}|�|�d��|�|�d��|�|�d��|��|�|�d��dS)NruF)r�rDr;rJrAr�r
r
rrE�s
z#BaseSemaphoreTests.test_try_acquirecsV|�d�����g���fdd�}t|d���|�t��dgddgd�dS)	Nr�cs$����d������d��dSrCrFr
�rgr�r
rr�sz8BaseSemaphoreTests.test_try_acquire_contended.<locals>.frMFr�Tr�)r�r;r
r%rRr�rKr
r�rrL�s
$z-BaseSemaphoreTests.test_try_acquire_contendedcCs�|�d�}|jt|jddd�|�|jdd��|�|jdd��|�|jdd��|��|�|jdd��t��}|�|jdd��t��|}|�	|d�dS)NruF��?r`g{�G�zt?rb)
r�rZrhr;rDrJrArrcr2)rr��tr�r
r
r�test_acquire_timeout�s
z'BaseSemaphoreTests.test_acquire_timeoutcsT|�������fdd�}t|d�}|��t�|�|j����|��dS)NcrNrrOr
�r�r
rr�rQz0BaseSemaphoreTests.test_default_value.<locals>.frI)	r�r;r
r#rrJrrAr%ryr
r�r�test_default_value�s
z%BaseSemaphoreTests.test_default_valuecsb��d��d��fdd�	}|�����d�������t|t�����d�����dS)Nruc	s���;����d�����������d��|r|�Wd�n1s(wYWd�dSWd�dS1s@wYdSrC)rDr;rArJrWr�r
rrY	s���"�z+BaseSemaphoreTests.test_with.<locals>._withFr)r�rDr;rArZr[)rrYr
r�rr\s
zBaseSemaphoreTests.test_withN)r(r)r*r+r7r�r>rVr�rErLr�r�r\r
r
r
rr�zs
% 

r�c@�eZdZdZdd�ZdS)�SemaphoreTestsz)
    Tests for unbounded semaphores.
    cCs.|�d�}|��|��|��|��dS�NrI)r�rAr;r�r
r
rr�s

z&SemaphoreTests.test_release_unacquiredN�r(r)r*r+r�r
r
r
rr��r�c@r�)�BoundedSemaphoreTestsz'
    Tests for bounded semaphores.
    cCs8|��}|�t|j�|��|��|�t|j�dSr)r�rZrhrAr;r�r
r
rr�+s
z-BoundedSemaphoreTests.test_release_unacquiredNr�r
r
r
rr�&r�r�c@s�eZdZdZdZdZdd�Zdd�Zdd	�Zd
d�Z	d"d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!S)#�BarrierTestsz$
    Tests for Barrier objects.
    rMg@cCs|j|j|jd�|_dS)Nr`)�barriertyperT�defaultTimeout�barrierr"r
r
rr.;r�zBarrierTests.setUpcCs|j��dSr)r��abortr"r
r
rr0=r/zBarrierTests.tearDowncCs"t||jd�}|�|��dSr�)r
rTr%ryr
r
r�run_threads@szBarrierTests.run_threadscCs�|jj}|�||j�t|�D]4}|d�d�|�t|d�||�|j��|d�d�|�t|d�|d|�|j��q|�|jjd�|�	|jj
�dS)NrTrI)r�ZpartiesrRrTrrr!r��	n_waitingrJ�broken)rrgr�mrr
r
r�	multipassEs
zBarrierTests.multipassrIcs&ggg����fdd�}��|�dS)z;
        Test that a barrier is passed in lockstep
        cs�����dSr)r�r
��passesrgrr
rrWsz$BarrierTests.test_barrier.<locals>.fN�r�)rr�rr
r�r�test_barrierRszBarrierTests.test_barriercCs
|�d�S)zC
        Test that a barrier works for 10 consecutive runs
        r�)r�r"r
r
r�test_barrier_10[s
zBarrierTests.test_barrier_10cs:g���fdd�}��|���t��tt�j���dS)z9
        test the return value from barrier.wait
        cs�j��}��|�dSr)r�r�r)r��rgrr
rrfs
z(BarrierTests.test_wait_return.<locals>.fN)r�rR�sumrrTrKr
r�r�test_wait_returnas
zBarrierTests.test_wait_returncs<g��fdd�}���j|�����fdd�}��|�dS)z,
        Test the 'action' callback
        cs��d�dSr&)rr
)rgr
r�actionrr/z(BarrierTests.test_action.<locals>.actioncs�����t��d�dSr�)r�rRr!r
�r�rgrr
rrusz#BarrierTests.test_action.<locals>.fN�r�rTr�)rr�rr
r�r�test_actionms
zBarrierTests.test_actioncsZg�g����fdd�}��|���t��d���t���jd����jj�dS)zK
        Test that an abort will put the barrier in a broken state
        cstz�j��}|�jdkrt��j����d�WdStjy+��d�YdSty9�j��YdSw�NruT)r�r�rTr�rr�BrokenBarrierErrorr��r�r�r�rr
rr�s


�z"BarrierTests.test_abort.<locals>.frrIN)r�rRr!rTrDr�r�rKr
r�r�
test_abort{s

zBarrierTests.test_abortcsdg�g�g�����fdd�}��|���t��d���t���jd���t���j�dS)zL
        Test that a 'reset' on a barrier frees the waiting threads
        cs��j��}|�jdkr)�jj�jdkr#t�d��jj�jdks�j��nz�j����d�Wntj	yD��d�Ynw�j����d�dS)NrurIg����MbP?T)
r�r�rTr�rr	�resetrrr�r��r�r��results3rr
rr�s

�
�
z"BarrierTests.test_reset.<locals>.frrIN)r�rRr!rTrKr
r�r�
test_reset�s
zBarrierTests.test_resetcsrg�g�g����j�������fdd�}��|���t��d���t���jd���t���j�dS)zF
        Test that a barrier can be reset after being broken.
        cs�z�j��}|�jdkrt��j����d�Wntjy)��d�Ynty6�j��Ynw����jdkrE�j������j����d�dSr�)	r�r�rTr�rrr�r�r�r��Zbarrier2r�r�r�rr
rr�s"


�

z,BarrierTests.test_abort_and_reset.<locals>.frrIN)r�rTr�rRr!rKr
r�r�test_abort_and_reset�s
z!BarrierTests.test_abort_and_resetcs�fdd�}��|�dS)z$
        Test wait(timeout)
        cs:�j��}|�jdkrt�d���tj�jjd�dS)Nrur�rb)r�r�rTrr	rZrr�r�r"r
rr�s

�z$BarrierTests.test_timeout.<locals>.fNr�rKr
r"rrj�szBarrierTests.test_timeoutcs,�j�jdd����fdd�}��|�dS)z4
        Test the barrier's default timeout
        g333333�?r`cs4���}|�jdkrt�d���tj�j�dS)Nrur�)r�rTrr	rZrr�r��r�rr
rr�s
z,BarrierTests.test_default_timeout.<locals>.fNr�rKr
r�r�test_default_timeout�sz!BarrierTests.test_default_timeoutcCs|�d�}|��|��dSr�)r�r�)rrUr
r
r�test_single_thread�s
zBarrierTests.test_single_threadN)rI)r(r)r*r+rTr�r.r0r�r�r�r�r�r�r�r�r�rjr�r�r
r
r
rr�4s$

	"r�) r+�osror�r�_threadrrrZunittestrk�testrZtest.supportrZ
skipUnless�hasattrr�r�objectr
ZTestCaser,r3rqr�r�r�r�r�r�r�r
r
r
r�<module>s:�1	DC_0