Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/test/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/test/__pycache__/test_gc.cpython-35.opt-1.pyc



��Yfw��@s�ddlZddlmZmZmZmZmZmZmZm	Z	ddl
mZmZddl
Z
ddlZddlZddlZyddlZWnek
r�dZYnXyddlmZWnek
r�dd�ZYnXGdd�de�ZGd	d
�d
e�ZeGdd�de��ZGd
d�dej�ZGdd�dej�ZGdd�dej�Zdd�Zedkr�e�dS)�N)�verbose�
refcount_test�run_unittest�strip_python_stderr�cpython_only�
start_threads�temp_dir�requires_type_collecting)�assert_python_ok�make_script)�with_tp_delcCsGdd�dt�}|S)Nc@seZdZdd�ZdS)zwith_tp_del.<locals>.Cc_std��dS)Nzrequires _testcapi.with_tp_del)�	TypeError)�cls�args�kwargs�r�1/opt/alt/python35/lib64/python3.5/test/test_gc.py�__new__szwith_tp_del.<locals>.C.__new__N)�__name__�
__module__�__qualname__rrrrr�Csr)�object)rrrrrrsrc@seZdZdd�ZdS)�C1055820cCs||_||_dS)N)�i�loop)�selfrrrr�__init__#s	zC1055820.__init__N)rrrrrrrrr"src@seZdZdd�ZdS)�GC_Detectorcs:d�_�fdd�}tjtd�|��_dS)NFcs
d�_dS)NT)�gc_happened)�ignored)rrr�it_happened.sz)GC_Detector.__init__.<locals>.it_happenedi�)r�weakref�refr�wr)rr!r)rrr+s	zGC_Detector.__init__N)rrrrrrrrr'src@s1eZdZdZddd�Zdd�ZdS)�
Uncollectablea)Create a reference cycle with multiple __del__ methods.

    An object in a reference cycle will never have zero references,
    and so must be garbage collected.  If one or more objects in the
    cycle have __del__ methods, the gc refuses to guess an order,
    and leaves the cycle uncollected.NcCs.|dkr!td|�|_n	||_dS)N�partner)r%r&)rr&rrrr=szUncollectable.__init__cCsdS)Nr)rrrr�
__tp_del__BszUncollectable.__tp_del__)rrr�__doc__rr'rrrrr%5sr%c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	d
d��Z
dd�Zedd��Z
edd��Zdd�Zedd��Zdd�Zdd�Zdd�Zedd ��Zed!d"��Zd#d$�Zejed%�d&d'��Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Z d2d3�Z!d4d5�Z"d6d7�Z#ed8d9��Z$e	d:d;��Z%e	d<d=��Z&d>d?�Z'd@S)A�GCTestscCs:g}|j|�tj�~|jtj�d�dS)N�)�append�gc�collect�assertEqual)r�lrrr�	test_listIs


zGCTests.test_listcCs7i}||d<tj�~|jtj�d�dS)Nr*)r,r-r.)r�drrr�	test_dictPs


zGCTests.test_dictcCsFg}|f}|j|�tj�~~|jtj�d�dS)N�)r+r,r-r.)rr/�trrr�
test_tupleWs	

zGCTests.test_tuplecCsCGdd�d�}||_tj�~|jtj�d�dS)Nc@seZdZdS)zGCTests.test_class.<locals>.AN)rrrrrrr�Absr6r)�ar,r-�assertNotEqual)rr6rrr�
test_classas
	
zGCTests.test_classcCs=Gdd�dt�}tj�~|jtj�d�dS)Nc@seZdZdS)z%GCTests.test_newstyleclass.<locals>.AN)rrrrrrrr6jsr6r)rr,r-r8)rr6rrr�test_newstyleclassis
zGCTests.test_newstyleclasscCsLGdd�d�}|�}||_tj�~|jtj�d�dS)Nc@seZdZdS)z GCTests.test_instance.<locals>.AN)rrrrrrrr6qsr6r)r7r,r-r8)rr6r7rrr�
test_instanceps		
zGCTests.test_instancecCs
Gdd�dt�}|�}||_tj�~|jtj�d�Gdd�dt�}Gdd�d||�}|�}||_tj�~|jtj�d�~~|jtj�d�|�|_~|jtj�d�|jtj�d�dS)Nc@seZdZdS)z#GCTests.test_newinstance.<locals>.AN)rrrrrrrr6{sr6rc@seZdZdS)z#GCTests.test_newinstance.<locals>.BN)rrrrrrr�B�sr<c@seZdZdS)z#GCTests.test_newinstance.<locals>.CN)rrrrrrrr�sr)rr7r,r-r8�listr.)rr6r7r<rrrr�test_newinstanceys&		
		
zGCTests.test_newinstancecCsCGdd�d�}|�}tj�~|jtj�d�dS)Nc@seZdZdd�ZdS)zGCTests.test_method.<locals>.AcSs|j|_dS)N)rZinit)rrrrr�sz'GCTests.test_method.<locals>.A.__init__N)rrrrrrrrr6�sr6r)r,r-r8)rr6r7rrr�test_method�s
	
zGCTests.test_methodcCs�tGdd�d��}Gdd�d�}|�}||_t|�}|�}||_tj�~~|jtj�d�x7tjD]}t|�|kr�|`Pq�W|jd�tjj	|�dS)Nc@seZdZdd�ZdS)z(GCTests.test_legacy_finalizer.<locals>.AcSsdS)Nr)rrrrr'�sz3GCTests.test_legacy_finalizer.<locals>.A.__tp_del__N)rrrr'rrrrr6�sr6c@seZdZdS)z(GCTests.test_legacy_finalizer.<locals>.BN)rrrrrrrr<�sr<rz&didn't find obj in garbage (finalizer))
rr7�id�br,r-r8�garbage�fail�remove)rr6r<r7�id_arA�objrrr�test_legacy_finalizer�s"				

zGCTests.test_legacy_finalizercCs�tGdd�dt��}Gdd�dt�}|�}||_t|�}|�}||_tj�~~|jtj�d�x7tjD]}t|�|kr�|`Pq�W|j	d�tjj
|�dS)Nc@seZdZdd�ZdS)z1GCTests.test_legacy_finalizer_newclass.<locals>.AcSsdS)Nr)rrrrr'�sz<GCTests.test_legacy_finalizer_newclass.<locals>.A.__tp_del__N)rrrr'rrrrr6�sr6c@seZdZdS)z1GCTests.test_legacy_finalizer_newclass.<locals>.BN)rrrrrrrr<�sr<rz&didn't find obj in garbage (finalizer))rrr7r@rAr,r-r8rBrCrD)rr6r<r7rErArFrrr�test_legacy_finalizer_newclass�s$				

z&GCTests.test_legacy_finalizer_newclasscCs:i}td|�tj�~|jtj�d�dS)Nzdef f(): pass
r3)�execr,r-r.)rr1rrr�
test_function�s


zGCTests.test_functioncCs7dd�}tj�|�|jtj�d�dS)NcSstj�}dS)N)�sys�	_getframe)�framerrr�f�szGCTests.test_frame.<locals>.fr*)r,r-r.)rrNrrr�
test_frame�s
zGCTests.test_framecCs�tj�|jtjg�g}|j|�t|�}tj�}tj|tjB�~tj�tj|�|jt	tj�d�tjj
�}|jt|�|�dS)Nr*)r,r-r.rBr+r@�	get_debug�	set_debugZ
DEBUG_SAVEALL�len�pop)r�LZid_L�debugrFrrr�test_saveall�s



zGCTests.test_saveallcCs]tj�}tj�tjd�Gdd�d�}|�}~tj�tj|�dS)Nr*c@seZdZdd�ZdS)zGCTests.test_del.<locals>.AcSst|�dS)N)�dir)rrrr�__del__sz#GCTests.test_del.<locals>.A.__del__N)rrrrXrrrrr6�sr6)r,�
get_threshold�enable�
set_threshold�disable)r�
thresholdsr6r7rrr�test_del�s

	
zGCTests.test_delcCs`tj�}tj�tjd�Gdd�dt�}|�}~tj�tj|�dS)Nr*c@seZdZdd�ZdS)z$GCTests.test_del_newclass.<locals>.AcSst|�dS)N)rW)rrrrrXsz,GCTests.test_del_newclass.<locals>.A.__del__N)rrrrXrrrrr6sr6)r,rYrZr[rr\)rr]r6r7rrr�test_del_newclasss

	
zGCTests.test_del_newclasscCs�tj�tj�\}}}g}tj�\}}}|j||fd�|j||fd�|j|d�|j||�dS)Nr�)rr)rr)r,r-�	get_countr.Z
assertLessZ
assertGreater)rr7rA�c�xr1�erNrrr�test_get_counts
zGCTests.test_get_countcCs�tj�g}tjd�tj�\}}}tjd�tj�\}}}tjd�tj�\}}	}
|j||fd�|j||fd�|j|	|
fd�dS)Nrr*r3)r*r)rr*)rr)r,r-rar.)rrcr7rArbr1rdrN�g�hrrrr�test_collect_generations+s



z GCTests.test_collect_generationscs�G�fdd�d��tj�d}x�td�D]�}g}x#t|�D]}|��g}qOWg}x#t|�D]}|��g}q{Wi}x)t|�D]}d|d��i}q�Wq6Wtj�dS)Ncs(eZdZdZ�fdd�ZdS)z#GCTests.test_trashcan.<locals>.Ouchrcs1�jd�_�jddkr-tj�dS)Nr*�r)�nr,r-)r)�OuchrrrXCsz+GCTests.test_trashcan.<locals>.Ouch.__del__N)rrrrjrXr)rkrrrkAsrk�r3r*)r,rZ�ranger\)r�N�countr4r�u�vr)rkr�
test_trashcan@s
zGCTests.test_trashcanz*test meaningless on builds without threadscs1d�d}dd��G��fdd�dt����fdd����fd	d
�}tj�}tjd�zvg�g}x3t|�D]%}tjd|�}|j|�q�Wt|�fd
d���t	j
d�WdQRXWdtj|�Xtj�|j
t�j�t�j��dS)N�<r3cssz	dVWdtjd�XdS)z<A generator that releases the GIL when closed or dealloc'ed.Ng���ư>)�time�sleeprrrr�sleeper_genis	z2GCTests.test_trashcan_threads.<locals>.sleeper_gencsCeZdZgZgZ�fdd�Z��fdd�ZdS)z(GCTests.test_trashcan_threads.<locals>.Ccs$||dd�<�jjd�dS)N)�initsr+)r�alist)rrrrtsz1GCTests.test_trashcan_threads.<locals>.C.__init__cs'�jjd���}t|�dS)N)�delsr+�next)rrf)rrvrrrXws	z0GCTests.test_trashcan_threads.<locals>.C.__del__N)rrrrwryrrXr)rrvrrrpsrcs<�g�}x&t��D]}�|g�g}qW~dS)zyCreate a sufficiently nested container object so that the
            trashcan mechanism is invoked when deallocating it.N)rm)rcr)r�NESTINGrr�make_nested�sz2GCTests.test_trashcan_threads.<locals>.make_nestedcsx�s��qWdS)z!Exercise make_nested() in a loop.Nrr)�exitr|rr�
run_thread�s	z1GCTests.test_trashcan_threads.<locals>.run_threadg�h㈵��>�targetcs
�jd�S)Nr*)r+r)r}rr�<lambda>�sz/GCTests.test_trashcan_threads.<locals>.<lambda>g�?)r=rK�getswitchinterval�setswitchintervalrm�	threadingZThreadr+rrtrur,r-r.rRrwry)rZ	N_THREADSr~Zold_switchintervalZthreadsrr4r)rr{r}r|rvr�test_trashcan_threadscs&

zGCTests.test_trashcan_threadscCs�Gdd�d�}|�}|�}||_||_tj�ttj�}~~|jtj�d�|jttj�|�dS)Nc@seZdZdd�ZdS)zGCTests.test_boom.<locals>.BoomcSs|`t�dS)N)�attr�AttributeError)r�
someattributerrr�__getattr__�sz+GCTests.test_boom.<locals>.Boom.__getattr__N)rrrr�rrrr�Boom�sr��)r�r,r-rRrBr.)rr�r7rA�
garbagelenrrr�	test_boom�s				
zGCTests.test_boomcCs�Gdd�d�}|�}|�}||_||_tj�ttj�}~~|jtj�d�|jttj�|�dS)Nc@s(eZdZdd�Zdd�ZdS)z!GCTests.test_boom2.<locals>.Boom2cSs
d|_dS)Nr)rc)rrrrr�sz*GCTests.test_boom2.<locals>.Boom2.__init__cSs.|jd7_|jdkr$|`t�dS)Nr*)rcr�r�)rr�rrrr��sz-GCTests.test_boom2.<locals>.Boom2.__getattr__N)rrrrr�rrrr�Boom2�sr�r�)r�r,r-rRrBr.)rr�r7rAr�rrr�
test_boom2�s
				
zGCTests.test_boom2cCs�Gdd�dt�}|�}|�}||_||_tj�ttj�}~~|jtj�d�|jttj�|�dS)Nc@seZdZdd�ZdS)z'GCTests.test_boom_new.<locals>.Boom_NewcSs|`t�dS)N)r�r�)rr�rrrr��sz3GCTests.test_boom_new.<locals>.Boom_New.__getattr__N)rrrr�rrrr�Boom_New�sr�r�)rr�r,r-rRrBr.)rr�r7rAr�rrr�
test_boom_new�s				
zGCTests.test_boom_newcCs�Gdd�dt�}|�}|�}||_||_tj�ttj�}~~|jtj�d�|jttj�|�dS)Nc@s(eZdZdd�Zdd�ZdS)z)GCTests.test_boom2_new.<locals>.Boom2_NewcSs
d|_dS)Nr)rc)rrrrr�sz2GCTests.test_boom2_new.<locals>.Boom2_New.__init__cSs.|jd7_|jdkr$|`t�dS)Nr*)rcr�r�)rr�rrrr��sz5GCTests.test_boom2_new.<locals>.Boom2_New.__getattr__N)rrrrr�rrrr�	Boom2_New�sr�r�)rr�r,r-rRrBr.)rr�r7rAr�rrr�test_boom2_new�s
				
zGCTests.test_boom2_newcCs.dddg}tj|�}|j�|j||�t|�}tj|�}|j�|j||�ddddi}ddddg}tj|�}|j�|j||�tjddgddid
�}|j�|j|ddgttd���|jtjddd	�g�dS)Nr*�r`�r3r�rr7y@)rrr)r,Z
get_referents�sortr.�tupler=rm)rrxZgotZatupleZadictZexpectedrrr�test_get_referents�s"


!
&zGCTests.test_get_referentscCsk|jtjd��|jtjd��|jtjd��|jtjd��|jtjd��|jtjd��|jtjd��|jtjd��|jtjtd���|jtjt��|jtjt��|jtjt��|jtjt���Gdd	�d	�}Gd
d�dt�}Gdd
�d
�}Gdd�dt�}Gdd�dt�}|jtjt��|jtj|��|jtj|���|jtj|���|jtjg��|jtjt	���|jtj|���|jtj|���|jtj|���dS)Nr*g�?y@TF�ar7c@seZdZdS)z*GCTests.test_is_tracked.<locals>.UserClassN)rrrrrrr�	UserClass%sr�c@seZdZdS)z(GCTests.test_is_tracked.<locals>.UserIntN)rrrrrrr�UserInt(sr�c@seZdZfZdS)z/GCTests.test_is_tracked.<locals>.UserClassSlotsN)rrr�	__slots__rrrr�UserClassSlots,sr�c@seZdZfZdS)z/GCTests.test_is_tracked.<locals>.UserFloatSlotsN)rrrr�rrrr�UserFloatSlots0sr�c@seZdZfZdS)z-GCTests.test_is_tracked.<locals>.UserIntSlotsN)rrrr�rrrr�UserIntSlots4sr�y�?@)
ZassertFalser,Z
is_tracked�	bytearray�type�intr�float�
assertTrue�set)rr�r�r�r�r�rrr�test_is_trackeds6zGCTests.test_is_trackedcs�g���fdd��dd�td�D�}�fdd�|D��d}tj�|jt��d�d}tj�|jt��d�x�D]}|j|d�q�WdS)Ncs!dd��D��dd�<dS)NcSsg|]}|��qSrr)�.0r$rrr�
<listcomp>Fs	z>GCTests.test_bug1055820b.<locals>.callback.<locals>.<listcomp>r)r )�WRs�ouchrr�callbackEsz*GCTests.test_bug1055820b.<locals>.callbackcSsg|]}t|��qSr)r)r�rrrrr�Hs	z,GCTests.test_bug1055820b.<locals>.<listcomp>r3cs"g|]}tj|���qSr)r"r#)r�rb)r�rrr�Is	r)rmr,r-r.rR)rZCsrbrcr)r�r�r�r�test_bug1055820bAs


zGCTests.test_bug1055820bcsZtj�Gdd�d��Gdd�d����fdd�}|�tj�dS)Nc@seZdZdS)z GCTests.test_bug21435.<locals>.AN)rrrrrrrr6esr6c@s(eZdZdd�Zdd�ZdS)z GCTests.test_bug21435.<locals>.BcSs
||_dS)N)rc)rrcrrrrisz)GCTests.test_bug21435.<locals>.B.__init__cSs
d|_dS)N)r�)rrrrrXlsz(GCTests.test_bug21435.<locals>.B.__del__N)rrrrrXrrrrr<hsr<cs.��}����}||_||_dS)N)r�)r7rA)r6r<rr�do_workos		z&GCTests.test_bug21435.<locals>.do_work)r,r-)rr�r)r6r<r�
test_bug21435Ys

zGCTests.test_bug21435cs�ddl�d}��fdd�}||d�}�jd|��jd|�||d�}�jd	|��jd
|kp�d|k|�||d�}�jd
|�dS)Nra�if 1:
            import gc
            import _testcapi
            @_testcapi.with_tp_del
            class X:
                def __init__(self, name):
                    self.name = name
                def __repr__(self):
                    return "<X %%r>" %% self.name
                def __tp_del__(self):
                    pass

            x = X('first')
            x.x = x
            x.y = X('second')
            del x
            gc.set_debug(%s)
        cs��jtjdd|gd�jd�j�}|j�\}}|jj�|jj��j|j	d��j|j
�d�t|�S)Nz-Wdz-c�stdout�stderrr�)�PopenrK�
executable�PIPEZcommunicater��closer�r.�
returncode�stripr)�code�pr�r�)r�
subprocessrr�run_command�s	

z5GCTests.test_garbage_at_shutdown.<locals>.run_command�0s=ResourceWarning: gc: 2 uncollectable objects at shutdown; uses<X 'first'>zgc.DEBUG_UNCOLLECTABLEs8ResourceWarning: gc: 2 uncollectable objects at shutdowns[<X 'first'>, <X 'second'>]s[<X 'second'>, <X 'first'>]zgc.DEBUG_SAVEALLs!uncollectable objects at shutdown)r�ZassertInZassertNotInr�)rr�r�r�r)rr�r�test_garbage_at_shutdownys		z GCTests.test_garbage_at_shutdowncCs8d}td|�\}}}|j|j�d�dS)Nz�if 1:
            import weakref
            class C:
                def __del__(self):
                    print('__del__ called')
            l = [C()]
            l.append(l)
            z-cs__del__ called)r
r.r�)rr��rc�out�errrrr�test_gc_main_module_at_shutdown�sz'GCTests.test_gc_main_module_at_shutdowncCsht��X}d}d|f}t|d|�td|�\}}}|j|j�d�WdQRXdS)Nz�if 1:
                import weakref
                class C:
                    def __del__(self):
                        print('__del__ called')
                l = [C()]
                l.append(l)
                zvif 1:
                import sys
                sys.path.insert(0, %r)
                import gctest
                Zgctestz-cs__del__ called)rrr
r.r�)rZ
script_dir�moduler�r�r�r�rrr�#test_gc_ordinary_module_at_shutdown�s
z+GCTests.test_gc_ordinary_module_at_shutdowncCs�tj�}|jt|�d�xy|D]q}|j|t�|jt|�dddh�|j|dd�|j|dd�|j|dd�q)Wtj�r�|j	tj
�tj�tj�}tjd�tj�}|j|dd|ddd�|j|dd|dd�|j|dd|dd�tjd�tj�}|j|dd|ddd�|j|dd|dd�|j|dd|ddd�dS)Nr��	collected�collections�
uncollectablerr*r3)
r,Z	get_statsr.rR�assertIsInstance�dictr�ZassertGreaterEqual�	isenabledZ
addCleanuprZr\r-)rZstats�st�old�newrrr�test_get_stats�s.


$  
$ zGCTests.test_get_statsN)(rrrr0r2r5r9r:r;r	r>r?rrGrHrJrrOrVr^r_rerhrr�unittestZ
skipUnlessr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr)Hs>
	
	#;/ 1r)c@sveZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	e
dd��ZdS)�GCCallbackTestscCshtj�|_tj�tj�|_tjd�tjj|j	�tjj|j
�g|_dS)Nr)r,r��enabledr\rPrUrQ�	callbacksr+�cb1�cb2�othergarbage)rrrr�setUp�s

zGCCallbackTests.setUpcCs�|`tjj|j�tjj|j�tj|j�|jrOtj	�tj
�x)tjD]}t|t
�rcd|_qcWtjdd�=|`tj
�dS)N)�visitr,r�rDr�r�rQrUr�rZr-rB�
isinstancer%r&r�)rrFrrr�tearDown�s	


zGCCallbackTests.tearDowncCsWg|_tj�tjdd�g}tjdd�<|jj|�g|_dS)N)r�r,r-rBr�r+)rrBrrr�precleans
	
'zGCCallbackTests.precleancCs#|jjd|t|�f�dS)Nr*)r�r+r�)r�phase�inforrrr�szGCCallbackTests.cb1cCs�|jjd|t|�f�|dkr�t|d�r�dd�tjD�}dd�tjD�tjdd�<x|D]}d|_qzWdS)Nr3�stop�cleanupcSs%g|]}t|t�r|�qSr)r�r%)r�rdrrrr�s	z'GCCallbackTests.cb2.<locals>.<listcomp>cSs%g|]}t|t�s|�qSr)r�r%)r�rdrrrr�s	)r�r+r��hasattrr,rBr&)rr�r�Zucrdrrrr�s#
zGCCallbackTests.cb2cCsC|j�tj�dd�|jD�}dd�|D�}dd�|D�}|j|dgd�|j|dgd�dd�|jD�}dd�|D�}d	d�|D�}|j|d
gd�|j|dgd�xT|jD]I}|d}|jd|k�|jd
|k�|jd|k�q�WdS)NcSsg|]}|d�qS)rr)r�rqrrrr�#s	z0GCCallbackTests.test_collect.<locals>.<listcomp>cSs"g|]}|dkr|�qS)r*r)r�rrrrr�$s	cSs"g|]}|dkr|�qS)r3r)r�rrrrr�%s	r*r3cSsg|]}|d�qS)r*r)r�rqrrrr�*s	cSs"g|]}|dkr|�qS)�startr)r�rrrrr�+s	cSs"g|]}|dkr|�qS)r�r)r�rrrrr�,s	r�r��
generationr�r�)r�r,r-r�r.r�)rrjZn1Zn2rqr�rrr�test_collects"


zGCCallbackTests.test_collectcCsM|j�tjd�x/|jD]$}|d}|j|dd�q!WdS)Nr3r�)r�r,r-r�r.)rrqr�rrr�test_collect_generation7s



z'GCCallbackTests.test_collect_generationcCsg|j�t�t�td�tj�xV|jD]K}|ddkrOq6|d}|j|dd�|j|dd�q6W|jttj�d�x!tjD]}|j	|t�q�Wd	|_
g|_gtjdd�<tj�xV|jD]K}|ddkrq�|d}|j|dd
�|j|dd�q�W|jttj�d
�dS)Ni�r*r�r3r�r��r�Tr)r�r%rr,r-r�r.rRrBr�r�)rrqr�rdrrr�test_collect_garbage>s2



		

z$GCCallbackTests.test_collect_garbageN)rrrr�r�r�r�r�r�r�rr�rrrrr��s


r�c@s@eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�GCTogglingTestscCstj�dS)N)r,rZ)rrrrr�dszGCTogglingTests.setUpcCstj�dS)N)r,r\)rrrrr�gszGCTogglingTests.tearDownc
s-td�}tj�td�}||_|`td�}tj|��g���fdd�}tj||�}d}}}g}d}t�}xS|js�|d7}|dkr�|j	d�|j
t��d�|jg�q�W|j
t��d�x�D]}	|j
|	d�qWdS)Nrr*r3cs��g�dd�<dS)Nr)r )�c2wrr�rrr�zsz2GCTogglingTests.test_bug1055820c.<locals>.callbacki'z'gc didn't happen after 10000 iterations)
rr,r-Z
keep_c0_aliverr"r#rrrCr.rRr+)
rZc0�c1�c2r�Zc0wr�junkr�detectorrcr)r�r�r�test_bug1055820cjs.
	 	


z GCTogglingTests.test_bug1055820cc	s%g�G��fdd�dt�}|d�}tj�td�}||_|`td�}tj|��d}}}t�}g}d}xS|js�|d7}|dkr�|j	d�|j
t��d�|jg�q�W|j
t��d�x�D]}|j
|d�qWdS)Ncs%eZdZ��fdd�ZdS)z+GCTogglingTests.test_bug1055820d.<locals>.Dcs��g�dd�<dS)Nr)r)r�r�rrrX�sz3GCTogglingTests.test_bug1055820d.<locals>.D.__del__N)rrrrXr)r�r�rr�D�sr�rr*r3i'z'gc didn't happen after 10000 iterations)
rr,r-Z
keep_d0_aliverr"r#rrrCr.rRr+)	rr�Zd0r�r�r�r�rrcr)r�r�r�test_bug1055820d�s,
		


z GCTogglingTests.test_bug1055820dN)rrrr�r�r�r�rrrrr�csFr�cCs�tj�}tj�tj�}tj|tj@�ztj�ttt	t
�Wdtj|�trutd�tj
�|s�tj�XdS)Nzrestoring automatic collection)r,r�r\rPrQZ
DEBUG_LEAKr-rr)r�r�r�printrZ)r�rUrrr�	test_main�s




r��__main__)r�Ztest.supportrrrrrrrr	Ztest.support.script_helperr
rrKrtr,r"r��ImportErrorZ	_testcapirrrrr%ZTestCaser)r�r�r�rrrrr�<module>s4:

���z�