HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.7/test/__pycache__/test_gc.cpython-37.opt-2.pyc
B

��gT��@s$ddlZddlmZmZmZmZmZmZmZm	Z	m
Z
mZddlm
Z
mZddlZddlZddlZddlZddlZyddlmZWnek
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�(/usr/local/lib/python3.7/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)rrrrrrrrrsrc@seZdZdd�ZdS)�GC_Detectorcs(d�_�fdd�}t�td�|��_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@seZdZddd�Zdd�ZdS)�
UncollectableNcCs |dkrt|d�|_n||_dS)N)�partner)r'r()rr(rrrr9szUncollectable.__init__cCsdS)Nr)rrrr�
__tp_del__>szUncollectable.__tp_del__)N)rrrrr)rrrrr'1s
r'c@sDeZdZdd�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$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Z ed7d8��Z!e	d9d:��Z"e	d;d<��Z#e	d=d>��Z$d?d@�Z%dAdB�Z&dCdD�Z'dES)F�GCTestscCs,g}|�|�t��~|�t��d�dS)N�)�append�gc�collect�assertEqual)r�lrrr�	test_listEs

zGCTests.test_listcCs*i}||d<t��~|�t��d�dS)Nr+)r-r.r/)r�drrr�	test_dictLs
zGCTests.test_dictcCs4g}|f}|�|�t��~~|�t��d�dS)N�)r,r-r.r/)rr0�trrr�
test_tupleSs
zGCTests.test_tuplecCs2Gdd�d�}||_t��~|�t��d�dS)Nc@seZdZdS)zGCTests.test_class.<locals>.AN)rrrrrrr�A^sr7r)�ar-r.�assertNotEqual)rr7rrr�
test_class]s
zGCTests.test_classcCs.Gdd�dt�}t��~|�t��d�dS)Nc@seZdZdS)z%GCTests.test_newstyleclass.<locals>.AN)rrrrrrrr7fsr7r)rr-r.r9)rr7rrr�test_newstyleclasseszGCTests.test_newstyleclasscCs8Gdd�d�}|�}||_t��~|�t��d�dS)Nc@seZdZdS)z GCTests.test_instance.<locals>.AN)rrrrrrrr7msr7r)r8r-r.r9)rr7r8rrr�
test_instancelszGCTests.test_instancecCs�Gdd�dt�}|�}||_t��~|�t��d�Gdd�dt�}Gdd�d||�}|�}||_t��~|�t��d�~~|�t��d�|�|_~|�t��d�|�t��d�dS)Nc@seZdZdS)z#GCTests.test_newinstance.<locals>.AN)rrrrrrrr7wsr7rc@seZdZdS)z#GCTests.test_newinstance.<locals>.BN)rrrrrrr�B~sr=c@seZdZdS)z#GCTests.test_newinstance.<locals>.CN)rrrrrrrr�sr)rr8r-r.r9�listr/)rr7r8r=rrrr�test_newinstanceus&zGCTests.test_newinstancecCs2Gdd�d�}|�}t��~|�t��d�dS)Nc@seZdZdd�ZdS)zGCTests.test_method.<locals>.AcSs|j|_dS)N)rZinit)rrrrr�sz'GCTests.test_method.<locals>.A.__init__N)rrrrrrrrr7�sr7r)r-r.r9)rr7r8rrr�test_method�s
zGCTests.test_methodcCs�tGdd�d��}Gdd�d�}|�}||_t|�}|�}||_t��~~|�t��d�x*tjD]}t|�|krd|`PqdW|�d�tj�	|�dS)Nc@seZdZdd�ZdS)z(GCTests.test_legacy_finalizer.<locals>.AcSsdS)Nr)rrrrr)��z3GCTests.test_legacy_finalizer.<locals>.A.__tp_del__N)rrrr)rrrrr7�sr7c@seZdZdS)z(GCTests.test_legacy_finalizer.<locals>.BN)rrrrrrrr=�sr=rz&didn't find obj in garbage (finalizer))
rr8�id�br-r.r9�garbage�fail�remove)rr7r=r8�id_arC�objrrr�test_legacy_finalizer�s"
zGCTests.test_legacy_finalizercCs�tGdd�dt��}Gdd�dt�}|�}||_t|�}|�}||_t��~~|�t��d�x*tjD]}t|�|krh|`PqhW|�	d�tj�
|�dS)Nc@seZdZdd�ZdS)z1GCTests.test_legacy_finalizer_newclass.<locals>.AcSsdS)Nr)rrrrr)�rAz<GCTests.test_legacy_finalizer_newclass.<locals>.A.__tp_del__N)rrrr)rrrrr7�sr7c@seZdZdS)z1GCTests.test_legacy_finalizer_newclass.<locals>.BN)rrrrrrrr=�sr=rz&didn't find obj in garbage (finalizer))rrr8rBrCr-r.r9rDrErF)rr7r=r8rGrCrHrrr�test_legacy_finalizer_newclass�s$
z&GCTests.test_legacy_finalizer_newclasscCs,i}td|�t��~|�t��d�dS)Nzdef f(): pass
r4)�execr-r.r/)rr2rrr�
test_function�s

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


zGCTests.test_saveallcCsFt��}t��t�d�Gdd�d�}|�}~t��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)rrrrZrrrrr7�sr7)r-�
get_threshold�enable�
set_threshold�disable)r�
thresholdsr7r8rrr�test_del�s
zGCTests.test_delcCsHt��}t��t�d�Gdd�dt�}|�}~t��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)rrrrZrrrrr7
sr7)r-r[r\r]rr^)rr_r7r8rrr�test_del_newclasss
zGCTests.test_del_newclasscCsdt��t��\}}}g}t��\}}}|�||fd�|�||fd�|�|d�|�||�dS)N)rr�)r-r.�	get_countr/Z
assertLess�
assertGreater)rr8rC�c�xr2�erPrrr�test_get_countszGCTests.test_get_countcCs�t��g}t�d�t��\}}}t�d�t��\}}}t�d�t��\}}	}
|�||fd�|�||fd�|�|	|
fd�dS)Nrr+r4)r+r)rr+)rr)r-r.rcr/)rrfr8rCrer2rgrP�g�hrrrr�test_collect_generations's


z GCTests.test_collect_generationscs�G�fdd�d��t��d}xrtd�D]f}g}xt|�D]}|��g}q:Wg}xt|�D]}|��g}qZWi}xt|�D]}|��d�}qzWq(Wt��dS)NcseZdZdZ�fdd�ZdS)z#GCTests.test_trashcan.<locals>.Ouchrcs&�jd�_�jddkr"t��dS)Nr+�r)�nr-r.)r)�OuchrrrZ?sz+GCTests.test_trashcan.<locals>.Ouch.__del__N)rrrrmrZr)rnrrrn=srn�r4)r+r4)r-r\�ranger^)r�N�countr5r�u�vr)rnr�
test_trashcan<szGCTests.test_trashcanc	s�d�d}dd��G��fdd�dt����fdd����fd	d
�}t��}t�d�z\g�g}x&t|�D]}tj|d�}|�|�qhWt|�fd
d���t	�
d�WdQRXWdt�|�Xt��|�
t�j�t�j��dS)N�<r4c	ssz
dVWdt�d�XdS)Ng���ư>)�time�sleeprrrr�sleeper_gends
z2GCTests.test_trashcan_threads.<locals>.sleeper_gencs.eZdZgZgZ�fdd�Z��fdd�ZdS)z(GCTests.test_trashcan_threads.<locals>.Ccs||dd�<�j�d�dS)N)�initsr,)r�alist)rrrrosz1GCTests.test_trashcan_threads.<locals>.C.__init__cs�j�d���}t|�dS)N)�delsr,�next)rri)rryrrrZrsz0GCTests.test_trashcan_threads.<locals>.C.__del__N)rrrrzr|rrZr)rryrrrksrcs,�g�}xt��D]}�|g�g}qW~dS)N)rp)rfr)r�NESTINGrr�make_nested}sz2GCTests.test_trashcan_threads.<locals>.make_nestedcsx�s��qWdS)Nrr)�exitrrr�
run_thread�sz1GCTests.test_trashcan_threads.<locals>.run_threadg�h㈵��>)�targetcs
��d�S)Nr+)r,r)r�rr�<lambda>�rAz/GCTests.test_trashcan_threads.<locals>.<lambda>g�?)r>rM�getswitchinterval�setswitchintervalrp�	threadingZThreadr,rrwrxr-r.r/rTrzr|)rZ	N_THREADSr�Zold_switchintervalZthreadsrr5r)rr~r�rryr�test_trashcan_threads_s&
zGCTests.test_trashcan_threadscCsbGdd�d�}|�}|�}||_||_t��ttj�}~~|�t��d�|�ttj�|�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.rTrDr/)rr�r8rC�
garbagelenrrr�	test_boom�s
zGCTests.test_boomcCsbGdd�d�}|�}|�}||_||_t��ttj�}~~|�t��d�|�ttj�|�dS)Nc@seZdZdd�Zdd�ZdS)z!GCTests.test_boom2.<locals>.Boom2cSs
d|_dS)Nr)rf)rrrrr�sz*GCTests.test_boom2.<locals>.Boom2.__init__cSs$|jd7_|jdkr|`t�dS)Nr+)rfr�r�)rr�rrrr��s
z-GCTests.test_boom2.<locals>.Boom2.__getattr__N)rrrrr�rrrr�Boom2�sr�r�)r�r-r.rTrDr/)rr�r8rCr�rrr�
test_boom2�s

zGCTests.test_boom2cCsdGdd�dt�}|�}|�}||_||_t��ttj�}~~|�t��d�|�ttj�|�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.rTrDr/)rr�r8rCr�rrr�
test_boom_new�s
zGCTests.test_boom_newcCsdGdd�dt�}|�}|�}||_||_t��ttj�}~~|�t��d�|�ttj�|�dS)Nc@seZdZdd�Zdd�ZdS)z)GCTests.test_boom2_new.<locals>.Boom2_NewcSs
d|_dS)Nr)rf)rrrrr�sz2GCTests.test_boom2_new.<locals>.Boom2_New.__init__cSs$|jd7_|jdkr|`t�dS)Nr+)rfr�r�)rr�rrrr��s
z5GCTests.test_boom2_new.<locals>.Boom2_New.__getattr__N)rrrrr�rrrr�	Boom2_New�sr�r�)rr�r-r.rTrDr/)rr�r8rCr�rrr�test_boom2_new�s

zGCTests.test_boom2_newcCs�dddg}t�|�}|��|�||�t|�}t�|�}|��|�||�ddd�}ddddg}t�|�}|��|�||�t�ddgddid�}|��|�|d	d	gttd���|�t�dd
d�g�dS)Nr+�rb�)r+rbr4r�)rrrrr8y@)r-Z
get_referents�sortr/�tupler>rp)rr{ZgotZatupleZadictZexpectedrrr�test_get_referents�s"




zGCTests.test_get_referentscCs�|�t�d��|�t�d��|�t�d��|�t�d��|�t�d��|�t�d��|�t�d��|�t�d��|�t�td���|�t�t��|�t�t��|�t�t��|�t�t���Gdd	�d	�}Gd
d�dt�}Gdd
�d
�}Gdd�dt�}Gdd�dt�}|�t�t��|�t�|��|�t�|���|�t�|���|�t�g��|�t�t	���|�t�|���|�t�|���|�t�|���dS)Nr+g�?y�?@TF�ar8c@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@seZdZdZdS)z/GCTests.test_is_tracked.<locals>.UserClassSlotsrN)rrr�	__slots__rrrr�UserClassSlots'sr�c@seZdZdZdS)z/GCTests.test_is_tracked.<locals>.UserFloatSlotsrN)rrrr�rrrr�UserFloatSlots+sr�c@seZdZdZdS)z-GCTests.test_is_tracked.<locals>.UserIntSlotsrN)rrrr�rrrr�UserIntSlots/sr�)
ZassertFalser-Z
is_tracked�	bytearray�type�intr�float�
assertTrue�set)rr�r�r�r�r�rrr�test_is_tracked
s6zGCTests.test_is_trackedcs�g���fdd��dd�td�D�}�fdd�|D��d}t��|�t��d�d}t��|�t��d�x�D]}|�|d�qtWdS)Ncsdd��D��dd�<dS)NcSsg|]
}|��qSrr)�.0r&rrr�
<listcomp>Asz>GCTests.test_bug1055820b.<locals>.callback.<locals>.<listcomp>r)r")�WRs�ouchrr�callback@sz*GCTests.test_bug1055820b.<locals>.callbackcSsg|]}t|��qSr)r)r�rrrrr�Csz,GCTests.test_bug1055820b.<locals>.<listcomp>r4csg|]}t�|���qSr)r$r%)r�re)r�rrr�Dsr)rpr-r.r/rT)rZCsrerfr)r�r�r�r�test_bug1055820b<s
zGCTests.test_bug1055820bcsDt��Gdd�d��Gdd�d����fdd�}|�t��dS)Nc@seZdZdS)z GCTests.test_bug21435.<locals>.AN)rrrrrrrr7`sr7c@seZdZdd�Zdd�ZdS)z GCTests.test_bug21435.<locals>.BcSs
||_dS)N)rf)rrfrrrrdsz)GCTests.test_bug21435.<locals>.B.__init__cSs
d|_dS)N)r�)rrrrrZgsz(GCTests.test_bug21435.<locals>.B.__del__N)rrrrrZrrrrr=csr=cs ��}����}||_||_dS)N)r�)r8rC)r7r=rr�do_workjs
z&GCTests.test_bug21435.<locals>.do_work)r-r.)rr�r)r7r=r�
test_bug21435Ts
zGCTests.test_bug21435cs�ddl�d}��fdd�}||d�}��d|���d|�||d�}��d	|���d
|kphd|k|�||d�}��d
|�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��|j����|j	d���|�
�d�t|�S)Nz-Wdz-c)�stdout�stderrrrA)�PopenrM�
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_shutdowntsz GCTests.test_garbage_at_shutdowncCs(d}td|�\}}}|�|��d�dS)Nz�if 1:
            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�s
z'GCTests.test_gc_main_module_at_shutdownc	CsPt��@}d}d|f}t|d|�td|�\}}}|�|��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r/r�)rZ
script_dir�moduler�r�r�r�rrr�#test_gc_ordinary_module_at_shutdown�s
z+GCTests.test_gc_ordinary_module_at_shutdownc	CsRd}|�tt�ttd��}|�|�WdQRXtt�\}}}|�|��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r/r�)rr�Zscriptr�r�r�rrr�test_global_del_SystemExit�sz"GCTests.test_global_del_SystemExitcCsxt��}|�t|�d�x^|D]V}|�|t�|�t|�dddh�|�|dd�|�|dd�|�|dd�qWt��r�|�	tj
�t��t��}t�d�t��}|�|dd|ddd�|�|dd|dd�|�|dd|dd�t�d�t��}|�|dd|ddd�|�|dd|dd�|�|dd|ddd�dS)Nr��	collected�collections�
uncollectablerr+r4)
r-�	get_statsr/rT�assertIsInstance�dictr�ZassertGreaterEqual�	isenabledr�r\r^r.)rZstats�st�old�newrrr�test_get_stats�s.


 
 zGCTests.test_get_statscCs4t��|�t��d�t��|�t��d�dS)Nr)r-ZfreezerdZget_freeze_countZunfreezer/)rrrr�test_freeze�szGCTests.test_freezecs�d}Gdd�d�}G�fdd�d|�}g�dd�}t��t��|�\}}xt|�D]
}|�qVWt��}|�\}	}
|�|d|�|�|	|d|�|�|
|d	�|	|
}}|�t��}|�\}	}
|�|d	�|�|	|d	�|�|
|d	�|	|
}}xt|�D]}|��qW|�t��}|�\}	}
|�|d	�|�|	|d	�|�|
|d	�|	|
}}t��}|�\}	}
|�|d|�|�|	|d|�|�|
|d	�t��dS)
N�dc@seZdZdd�ZdS)zGCTests.test_38379.<locals>.AcSs
||_dS)N)�me)rrrrr�sz&GCTests.test_38379.<locals>.A.__init__N)rrrrrrrrr7�sr7cseZdZ�fdd�ZdS)zGCTests.test_38379.<locals>.Zcs��|�dS)N)r,)r)�zsrrrZsz%GCTests.test_38379.<locals>.Z.__del__N)rrrrZr)r�rr�Zsr�cSst��d}|d|dfS)N���r�r�)r-r�)r2rrr�getstatssz$GCTests.test_38379.<locals>.getstatsr4r)r-r.r^rpr/r\)rrqr7r�r�ZoldcZoldncrr5reZncr)r�r�
test_38379�sL








zGCTests.test_38379N)(rrrr1r3r6r:r;r<r	r?r@rrIrJrLrrQrXr`rarhrkrur�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr*DsD
	
	#:/ 1r*c@sPeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	e
dd��ZdS)�GCCallbackTestscCsLt��|_t��t��|_t�d�tj�|j	�tj�|j
�g|_dS)Nr)r-r��enabledr^rRrWrS�	callbacksr,�cb1�cb2�othergarbage)rrrr�setUp?s


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

zGCCallbackTests.tearDowncCsBg|_t��tjdd�g}tjdd�<|j�|�g|_dS)N)r�r-r.rDr�r,)rrDrrr�precleanZs
zGCCallbackTests.precleancCs|j�d|t|�f�dS)Nr+)r�r,r�)r�phase�inforrrr�dszGCCallbackTests.cb1cCsj|j�d|t|�f�|dkrft|d�rfdd�tjD�}dd�tjD�tjdd�<x|D]
}d|_qXWdS)Nr4�stop�cleanupcSsg|]}t|t�r|�qSr)r�r')r�rgrrrr�ksz'GCCallbackTests.cb2.<locals>.<listcomp>cSsg|]}t|t�s|�qSr)r�r')r�rgrrrr�ls)r�r,r��hasattrr-rDr()rr�r�Zucrgrrrr�gs
zGCCallbackTests.cb2cCs�|��t��dd�|jD�}dd�|D�}dd�|D�}|�|dgd�|�|dgd�dd�|jD�}dd�|D�}d	d�|D�}|�|d
gd�|�|dgd�x@|jD]6}|d}|�d|k�|�d
|k�|�d|k�q�WdS)NcSsg|]}|d�qS)rr)r�rtrrrr�xsz0GCCallbackTests.test_collect.<locals>.<listcomp>cSsg|]}|dkr|�qS)r+r)r�rrrrr�yscSsg|]}|dkr|�qS)r4r)r�rrrrr�zsr+r4cSsg|]}|d�qS)r+r)r�rtrrrr�scSsg|]}|dkr|�qS)�startr)r�rrrrr��scSsg|]}|dkr|�qS)r�r)r�rrrrr��sr�r��
generationr�r�)r�r-r.r�r/r�)rrmZn1Zn2rtr�rrr�test_collectqs"zGCCallbackTests.test_collectcCs>|��t�d�x&|jD]}|d}|�|dd�qWdS)Nr4r�)r�r-r.r�r/)rrtr�rrr�test_collect_generation�s

z'GCCallbackTests.test_collect_generationcCs|��t�t�td�t��xD|jD]:}|ddkr>q,|d}|�|dd�|�|dd�q,W|�ttj�d�xtjD]}|�	|t�q�Wd	|_
g|_gtjdd�<t��xD|jD]:}|ddkr�q�|d}|�|dd
�|�|dd�q�W|�ttj�d
�dS)Ni�r+r�r4r�r��r�Tr)r�r'rr-r.r�r/rTrDr�r�)rrtr�rgrrr�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)
�GCTogglingTestscCst��dS)N)r-r\)rrrrr��szGCTogglingTests.setUpcCst��dS)N)r-r^)rrrrr��szGCTogglingTests.tearDownc
s�td�}t��td�}||_|`td�}t�|��g���fdd�}t�||�}d}}}g}d}t�}x>|js�|d7}|dkr�|�	d�|�
t��d�|�g�qnW|�
t��d�x�D]}	|�
|	d�q�WdS)Nrr+r4cs��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!rEr/rTr,)
rZc0�c1�c2r�Zc0wr�junkr�detectorrfr)r�r�r�test_bug1055820c�s.
 

z GCTogglingTests.test_bug1055820cc	s�g�G��fdd�dt�}|d�}t��td�}||_|`td�}t�|��d}}}t�}g}d}x>|js�|d7}|dkr�|�	d�|�
t��d�|�g�qjW|�
t��d�x�D]}|�
|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�Dsr�rr+r4i'z'gc didn't happen after 10000 iterations)
rr-r.Z
keep_d0_aliverr$r%r r!rEr/rTr,)	rr�Zd0r�r�r�r�rrfr)r�r�r�test_bug1055820ds,


z GCTogglingTests.test_bug1055820dN)rrrr�r�r�r�rrrrr��sFr�c	Cstt��}t��t��}t�|tj@�zt��ttt	t
�Wdt�|�trZtd�t�
�|snt��XdS)Nzrestoring automatic collection)r-r�r^rRrSZ
DEBUG_LEAKr.rr*r�r�r�printr\)r�rWrrr�	test_mainHs
r��__main__)!ZunittestZtest.supportrrrrrrrr	r
rZtest.support.script_helperrr
rMrwr-r$r�Z	_testcapir�ImportErrorrrr r'ZTestCaser*r�r�r�rrrrr�<module>s80z