Your IP : 216.73.216.213


Current Path : /opt/alt/python36/lib64/python3.6/test/__pycache__/
Upload File :
Current File : //opt/alt/python36/lib64/python3.6/test/__pycache__/test_gc.cpython-36.opt-1.pyc

3

� fP��@sBddlZddlmZmZmZmZmZmZmZm	Z	m
Z
mZddlm
Z
mZddlZddlZddlZddlZyddlZWnek
r�dZYnXyddlmZWnek
r�dd�ZYnXGdd�de�ZGd	d
�d
e�ZeGdd�de��ZGd
d�dej�ZGdd�dej�ZGdd�dej�Zdd�Ze dk�r>e�dS)�N)
�verbose�
refcount_test�run_unittest�strip_python_stderr�cpython_only�
start_threads�temp_dir�requires_type_collecting�TESTFN�unlink)�assert_python_ok�make_script)�with_tp_delcCsGdd�dt�}|S)Nc@seZdZdd�ZdS)zwith_tp_del.<locals>.Cc_std��dS)Nzrequires _testcapi.with_tp_del)�	TypeError)�cls�args�kwargs�r�1/opt/alt/python36/lib64/python3.6/test/test_gc.py�__new__szwith_tp_del.<locals>.C.__new__N)�__name__�
__module__�__qualname__rrrrr�Csr)�object)rrrrrrsrc@seZdZdd�ZdS)�C1055820cCs||_||_dS)N)�i�loop)�selfrrrr�__init__#szC1055820.__init__N)rrrrrrrrr"src@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 'sr c@s"eZdZdZddd�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 |dkrt|d�|_n||_dS)N)�partner)r'r()rr(rrrr=szUncollectable.__init__cCsdS)Nr)rrrr�
__tp_del__BszUncollectable.__tp_del__)N)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&e	d>d?��Z'd@dA�Z(dBS)C�GCTestscCs,g}|j|�tj�~|jtj�d�dS)N�)�append�gc�collect�assertEqual)r�lrrr�	test_listIs

zGCTests.test_listcCs*i}||d<tj�~|jtj�d�dS)Nr,)r.r/r0)r�drrr�	test_dictPs
zGCTests.test_dictcCs4g}|f}|j|�tj�~~|jtj�d�dS)N�)r-r.r/r0)rr1�trrr�
test_tupleWs
zGCTests.test_tuplecCs2Gdd�d�}||_tj�~|jtj�d�dS)Nc@seZdZdS)zGCTests.test_class.<locals>.AN)rrrrrrr�Absr8r)�ar.r/�assertNotEqual)rr8rrr�
test_classas
zGCTests.test_classcCs.Gdd�dt�}tj�~|jtj�d�dS)Nc@seZdZdS)z%GCTests.test_newstyleclass.<locals>.AN)rrrrrrrr8jsr8r)rr.r/r:)rr8rrr�test_newstyleclassiszGCTests.test_newstyleclasscCs8Gdd�d�}|�}||_tj�~|jtj�d�dS)Nc@seZdZdS)z GCTests.test_instance.<locals>.AN)rrrrrrrr8qsr8r)r9r.r/r:)rr8r9rrr�
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@seZdZdS)z#GCTests.test_newinstance.<locals>.AN)rrrrrrrr8{sr8rc@seZdZdS)z#GCTests.test_newinstance.<locals>.BN)rrrrrrr�B�sr>c@seZdZdS)z#GCTests.test_newinstance.<locals>.CN)rrrrrrrr�sr)rr9r.r/r:�listr0)rr8r9r>rrrr�test_newinstanceys&zGCTests.test_newinstancecCs2Gdd�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)rrrrrrrrr8�sr8r)r.r/r:)rr8r9rrr�test_method�s
zGCTests.test_methodcCs�tGdd�d��}Gdd�d�}|�}||_t|�}|�}||_tj�~~|jtj�d�x*tjD]}t|�|krd|`PqdW|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)rrrrr8�sr8c@seZdZdS)z(GCTests.test_legacy_finalizer.<locals>.BN)rrrrrrrr>�sr>rz&didn't find obj in garbage (finalizer))
rr9�id�br.r/r:�garbage�fail�remove)rr8r>r9�id_arC�objrrr�test_legacy_finalizer�s"
zGCTests.test_legacy_finalizercCs�tGdd�dt��}Gdd�dt�}|�}||_t|�}|�}||_tj�~~|jtj�d�x*tjD]}t|�|krh|`PqhW|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)rrrrr8�sr8c@seZdZdS)z1GCTests.test_legacy_finalizer_newclass.<locals>.BN)rrrrrrrr>�sr>rz&didn't find obj in garbage (finalizer))rrr9rBrCr.r/r:rDrErF)rr8r>r9rGrCrHrrr�test_legacy_finalizer_newclass�s$
z&GCTests.test_legacy_finalizer_newclasscCs,i}td|�tj�~|jtj�d�dS)Nzdef f(): pass
r5)�execr.r/r0)rr3rrr�
test_function�s

zGCTests.test_functioncCs*dd�}tj�|�|jtj�d�dS)NcSstj�}dS)N)�sys�	_getframe)�framerrr�f�szGCTests.test_frame.<locals>.fr,)r.r/r0)rrPrrr�
test_frame�szGCTests.test_framecCs�tj�|jtjg�g}|j|�t|�}tj�}tj|tjB�~tj�tj|�|jt	tj�d�tjj
�}|jt|�|�dS)Nr,)r.r/r0rDr-rB�	get_debug�	set_debugZ
DEBUG_SAVEALL�len�pop)r�LZid_L�debugrHrrr�test_saveall�s


zGCTests.test_saveallcCsFtj�}tj�tjd�Gdd�d�}|�}~tj�tj|�dS)Nr,c@seZdZdd�ZdS)zGCTests.test_del.<locals>.AcSst|�dS)N)�dir)rrrr�__del__sz#GCTests.test_del.<locals>.A.__del__N)rrrrZrrrrr8�sr8)r.�
get_threshold�enable�
set_threshold�disable)r�
thresholdsr8r9rrr�test_del�s
zGCTests.test_delcCsHtj�}tj�tjd�Gdd�dt�}|�}~tj�tj|�dS)Nr,c@seZdZdd�ZdS)z$GCTests.test_del_newclass.<locals>.AcSst|�dS)N)rY)rrrrrZsz,GCTests.test_del_newclass.<locals>.A.__del__N)rrrrZrrrrr8sr8)r.r[r\r]rr^)rr_r8r9rrr�test_del_newclasss
zGCTests.test_del_newclasscCsdtj�tj�\}}}g}tj�\}}}|j||fd�|j||fd�|j|d�|j||�dS)Nr�)rr)rr)r.r/�	get_countr0Z
assertLessZ
assertGreater)rr9rC�c�xr3�erPrrr�test_get_countszGCTests.test_get_countcCs�tj�g}tjd�tj�\}}}tjd�tj�\}}}tjd�tj�\}}	}
|j||fd�|j||fd�|j|	|
fd�dS)Nrr,r5)r,r)rr,)rr)r.r/rcr0)rrer9rCrdr3rfrP�g�hrrrr�test_collect_generations+s


z GCTests.test_collect_generationscs�G�fdd�d��tj�d}xrtd�D]f}g}xt|�D]}|��g}q:Wg}xt|�D]}|��g}qZWi}xt|�D]}|��d�}qzWq(Wtj�dS)NcseZdZdZ�fdd�ZdS)z#GCTests.test_trashcan.<locals>.Ouchrcs&�jd�_�jddkr"tj�dS)Nr,�r)�nr.r/)r)�OuchrrrZCsz+GCTests.test_trashcan.<locals>.Ouch.__del__N)rrrrlrZr)rmrrrmAsrm�r5)r,r5)r.r\�ranger^)r�N�countr6r�u�vr)rmr�
test_trashcan@szGCTests.test_trashcanz*test meaningless on builds without threadscs�d�d}dd��G��fdd�dt����fdd����fd	d
�}tj�}tjd�z\g�g}x&t|�D]}tj|d�}|j|�qhWt|�fd
d���t	j
d�WdQRXWdtj|�Xtj�|j
t�j�t�j��dS)N�<r5cssz
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_gencs.eZdZgZgZ�fdd�Z��fdd�ZdS)z(GCTests.test_trashcan_threads.<locals>.Ccs||dd�<�jjd�dS)N)�initsr-)r�alist)rrrrtsz1GCTests.test_trashcan_threads.<locals>.C.__init__cs�jjd���}t|�dS)N)�delsr-�next)rrh)rrxrrrZwsz0GCTests.test_trashcan_threads.<locals>.C.__del__N)rrrryr{rrZr)rrxrrrpsrcs,�g�}xt��D]}�|g�g}qW~dS)zyCreate a sufficiently nested container object so that the
            trashcan mechanism is invoked when deallocating it.N)ro)rer)r�NESTINGrr�make_nested�sz2GCTests.test_trashcan_threads.<locals>.make_nestedcsx�s��qWdS)z!Exercise make_nested() in a loop.Nrr)�exitr~rr�
run_thread�sz1GCTests.test_trashcan_threads.<locals>.run_threadg�h㈵��>)�targetcs
�jd�S)Nr,)r-r)rrr�<lambda>�sz/GCTests.test_trashcan_threads.<locals>.<lambda>g�?)r?rM�getswitchinterval�setswitchintervalro�	threadingZThreadr-rrvrwr.r/r0rTryr{)rZ	N_THREADSr�Zold_switchintervalZthreadsrr6r)rr}rr~rxr�test_trashcan_threadscs&
zGCTests.test_trashcan_threadscCsbGdd�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�sr��)r�r.r/rTrDr0)rr�r9rC�
garbagelenrrr�	test_boom�s
zGCTests.test_boomcCsbGdd�d�}|�}|�}||_||_tj�ttj�}~~|jtj�d�|jttj�|�dS)Nc@seZdZdd�Zdd�ZdS)z!GCTests.test_boom2.<locals>.Boom2cSs
d|_dS)Nr)re)rrrrr�sz*GCTests.test_boom2.<locals>.Boom2.__init__cSs$|jd7_|jdkr|`t�dS)Nr,)rer�r�)rr�rrrr��s
z-GCTests.test_boom2.<locals>.Boom2.__getattr__N)rrrrr�rrrr�Boom2�sr�r�)r�r.r/rTrDr0)rr�r9rCr�rrr�
test_boom2�s

zGCTests.test_boom2cCsdGdd�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�sr�r�)rr�r.r/rTrDr0)rr�r9rCr�rrr�
test_boom_new�s
zGCTests.test_boom_newcCsdGdd�dt�}|�}|�}||_||_tj�ttj�}~~|jtj�d�|jttj�|�dS)Nc@seZdZdd�Zdd�ZdS)z)GCTests.test_boom2_new.<locals>.Boom2_NewcSs
d|_dS)Nr)re)rrrrr�sz2GCTests.test_boom2_new.<locals>.Boom2_New.__init__cSs$|jd7_|jdkr|`t�dS)Nr,)rer�r�)rr�rrrr��s
z5GCTests.test_boom2_new.<locals>.Boom2_New.__getattr__N)rrrrr�rrrr�	Boom2_New�sr�r�)rr�r.r/rTrDr0)rr�r9rCr�rrr�test_boom2_new�s

zGCTests.test_boom2_newcCs�dddg}tj|�}|j�|j||�t|�}tj|�}|j�|j||�ddd�}ddddg}tj|�}|j�|j||�tjddgddid�}|j�|j|ddgttd���|jtjdd	d
�g�dS)Nr,�rb�)r,rbr5r�rr9y@)rrr)r.Z
get_referents�sortr0�tupler?ro)rrzZgotZatupleZadictZexpectedrrr�test_get_referents�s"




zGCTests.test_get_referentscCs�|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�ar9c@seZdZdS)z*GCTests.test_is_tracked.<locals>.UserClassN)rrrrrrr�	UserClass%sr�c@seZdZdS)z(GCTests.test_is_tracked.<locals>.UserIntN)rrrrrrr�UserInt(sr�c@seZdZfZdS)z/GCTests.test_is_tracked.<locals>.UserClassSlotsN)rrr�	__slots__rrrr�UserClassSlots,sr�c@seZdZfZdS)z/GCTests.test_is_tracked.<locals>.UserFloatSlotsN)rrrr�rrrr�UserFloatSlots0sr�c@seZdZfZdS)z-GCTests.test_is_tracked.<locals>.UserIntSlotsN)rrrr�rrrr�UserIntSlots4sr�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�qtWdS)Ncsdd��D��dd�<dS)NcSsg|]
}|��qSrr)�.0r&rrr�
<listcomp>Fsz>GCTests.test_bug1055820b.<locals>.callback.<locals>.<listcomp>r)r")�WRs�ouchrr�callbackEsz*GCTests.test_bug1055820b.<locals>.callbackcSsg|]}t|��qSr)r)r�rrrrr�Hsz,GCTests.test_bug1055820b.<locals>.<listcomp>r5csg|]}tj|���qSr)r$r%)r�rd)r�rrr�Isr)ror.r/r0rT)rZCsrdrer)r�r�r�r�test_bug1055820bAs
zGCTests.test_bug1055820bcsDtj�Gdd�d��Gdd�d����fdd�}|�tj�dS)Nc@seZdZdS)z GCTests.test_bug21435.<locals>.AN)rrrrrrrr8esr8c@seZdZdd�Zdd�ZdS)z GCTests.test_bug21435.<locals>.BcSs
||_dS)N)re)rrerrrrisz)GCTests.test_bug21435.<locals>.B.__init__cSs
d|_dS)N)r�)rrrrrZlsz(GCTests.test_bug21435.<locals>.B.__del__N)rrrrrZrrrrr>hsr>cs ��}����}||_||_dS)N)r�)r9rC)r8r>rr�do_workos
z&GCTests.test_bug21435.<locals>.do_work)r.r/)rr�r)r8r>r�
test_bug21435Ys
zGCTests.test_bug21435cs�ddl�d}��fdd�}||d�}�jd|��jd|�||d�}�jd	|��jd
|kphd|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)
        csd�jtjdd|g�j�jd�}|j�\}}|jj�|jj��j|j	d��j|j
�d�t|�S)Nz-Wdz-c)�stdout�stderrr�)�PopenrM�
executable�PIPEZcommunicater��closer�r0�
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_shutdowncCs(d}td|�\}}}|j|j�d�dS)Nz�if 1:
            class C:
                def __del__(self):
                    print('__del__ called')
            l = [C()]
            l.append(l)
            z-cs__del__ called)rr0r�)rr��rc�out�errrrr�test_gc_main_module_at_shutdown�s
z'GCTests.test_gc_main_module_at_shutdowncCsPt��@}d}d|f}t|d|�td|�\}}}|j|j�d�WdQRXdS)Nz�if 1:
                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)rr
rr0r�)rZ
script_dir�moduler�r�r�r�rrr�#test_gc_ordinary_module_at_shutdown�s
z+GCTests.test_gc_ordinary_module_at_shutdownc
CsRd}|jtt�ttd��}|j|�WdQRXtt�\}}}|j|j�d�dS)Nz�if 1:
            class ClassWithDel:
                def __del__(self):
                    print('__del__ called')
            a = ClassWithDel()
            a.link = a
            raise SystemExit(0)�ws__del__ called)�
addCleanuprr
�open�writerr0r�)rr�Zscriptr�r�r�rrr�test_global_del_SystemExit�sz"GCTests.test_global_del_SystemExitcCsxtj�}|jt|�d�x^|D]V}|j|t�|jt|�dddh�|j|dd�|j|dd�|j|dd�qWtj�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,r5)
r.Z	get_statsr0rT�assertIsInstance�dictr�ZassertGreaterEqual�	isenabledr�r\r^r/)rZstats�st�old�newrrr�test_get_stats�s.


 
 zGCTests.test_get_statsN))rrrr2r4r7r;r<r=r	r@rArrIrJrLrrQrXr`rargrjrt�unittestZ
skipUnlessr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr+Hs@
	
	#;/ 1r+c@sPeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	e
dd��ZdS)�GCCallbackTestscCsLtj�|_tj�tj�|_tjd�tjj|j	�tjj|j
�g|_dS)Nr)r.r��enabledr^rRrWrS�	callbacksr-�cb1�cb2�othergarbage)rrrr�setUp�s


zGCCallbackTests.setUpcCs~|`tjj|j�tjj|j�tj|j�|jr:tj	�tj
�xtjD]}t|t
�rJd|_qJWtjdd�=|`tj
�dS)N)�visitr.r�rFr�r�rSrWr�r\r/rD�
isinstancer'r(r�)rrHrrr�tearDowns

zGCCallbackTests.tearDowncCsBg|_tj�tjdd�g}tjdd�<|jj|�g|_dS)N)r�r.r/rDr�r-)rrDrrr�precleans
zGCCallbackTests.precleancCs|jjd|t|�f�dS)Nr,)r�r-r�)r�phase�inforrrr�szGCCallbackTests.cb1cCsj|jjd|t|�f�|dkrft|d�rfdd�tjD�}dd�tjD�tjdd�<x|D]
}d|_qXWdS)Nr5�stop�cleanupcSsg|]}t|t�r|�qSr)r�r')r�rfrrrr�#sz'GCCallbackTests.cb2.<locals>.<listcomp>cSsg|]}t|t�s|�qSr)r�r')r�rfrrrr�$s)r�r-r��hasattrr.rDr()rr�r�Zucrfrrrr�s
zGCCallbackTests.cb2cCs�|j�tj�dd�|jD�}dd�|D�}dd�|D�}|j|dgd�|j|dgd�dd�|jD�}dd�|D�}d	d�|D�}|j|d
gd�|j|dgd�x@|jD]6}|d}|jd|k�|jd
|k�|jd|k�q�WdS)NcSsg|]}|d�qS)rr)r�rsrrrr�0sz0GCCallbackTests.test_collect.<locals>.<listcomp>cSsg|]}|dkr|�qS)r,r)r�rrrrr�1scSsg|]}|dkr|�qS)r5r)r�rrrrr�2sr,r5cSsg|]}|d�qS)r,r)r�rsrrrr�7scSsg|]}|dkr|�qS)�startr)r�rrrrr�8scSsg|]}|dkr|�qS)r�r)r�rrrrr�9sr�r��
generationr�r�)r�r.r/r�r0r�)rrlZn1Zn2rsr�rrr�test_collect)s"zGCCallbackTests.test_collectcCs>|j�tjd�x&|jD]}|d}|j|dd�qWdS)Nr5r�)r�r.r/r�r0)rrsr�rrr�test_collect_generationDs

z'GCCallbackTests.test_collect_generationcCs|j�t�t�td�tj�xD|jD]:}|ddkr>q,|d}|j|dd�|j|dd�q,W|jttj�d�xtjD]}|j	|t�q�Wd	|_
g|_gtjdd�<tj�xD|jD]:}|ddkr�q�|d}|j|dd
�|j|dd�q�W|jttj�d
�dS)Ni�r,r�r5r�r��r�Tr)r�r'rr.r/r�r0rTrDr�r�)rrsr�rfrrr�test_collect_garbageKs2z$GCCallbackTests.test_collect_garbageN)rrrr�r�r�r�r�r�r�rr�rrrrr��s


r�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�GCTogglingTestscCstj�dS)N)r.r\)rrrrr�qszGCTogglingTests.setUpcCstj�dS)N)r.r^)rrrrr�tszGCTogglingTests.tearDownc
s�td�}tj�td�}||_|`td�}tj|��g���fdd�}tj||�}d}}}g}d}t�}x>|js�|d7}|dkr�|j	d�|j
t��d�|jg�qnW|j
t��d�x�D]}	|j
|	d�q�WdS)Nrr,r5cs��g�dd�<dS)Nr)r")�c2wrr�rrr��sz2GCTogglingTests.test_bug1055820c.<locals>.callbacki'z'gc didn't happen after 10000 iterations)
rr.r/Z
keep_c0_aliverr$r%r r!rEr0rTr-)
rZc0�c1�c2r�Zc0wr�junkr�detectorrer)r�r�r�test_bug1055820cws.
 

z GCTogglingTests.test_bug1055820cc	s�g�G��fdd�dt�}|d�}tj�td�}||_|`td�}tj|��d}}}t�}g}d}x>|js�|d7}|dkr�|j	d�|j
t��d�|jg�qjW|j
t��d�x�D]}|j
|d�q�WdS)NcseZdZ��fdd�ZdS)z+GCTogglingTests.test_bug1055820d.<locals>.Dcs��g�dd�<dS)Nr)r)r�r�rrrZ�sz3GCTogglingTests.test_bug1055820d.<locals>.D.__del__N)rrrrZr)r�r�rr�D�sr�rr,r5i'z'gc didn't happen after 10000 iterations)
rr.r/Z
keep_d0_aliverr$r%r r!rEr0rTr-)	rr�Zd0r�r�r�r�rrer)r�r�r�test_bug1055820d�s,


z GCTogglingTests.test_bug1055820dN)rrrr�r�r�r�rrrrr�psFr�cCsttj�}tj�tj�}tj|tj@�ztj�ttt	t
�Wdtj|�trZtd�tj
�|sntj�XdS)Nzrestoring automatic collection)r.r�r^rRrSZ
DEBUG_LEAKr/rr+r�r�r�printr\)r�rWrrr�	test_mains
r��__main__)!r�Ztest.supportrrrrrrrr	r
rZtest.support.script_helperrr
rMrvr.r$r��ImportErrorZ	_testcapirrrr r'ZTestCaser+r�r�r�rrrrr�<module>s<0
3z