Your IP : 216.73.216.213


Current Path : /proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/
Upload File :
Current File : //proc/242857/root/opt/alt/python34/lib64/python3.4/test/__pycache__/test_gc.cpython-34.pyc

�
f f��@s�ddlZddlmZmZmZmZmZmZddlm	Z	m
Z
mZddlZddl
Z
ddlZddlZyddlZWnek
r�dZYnXyddlmZWnek
r�dd�ZYnXGdd�de�ZGd	d
�d
e�ZeGdd�de��ZGd
d�dej�ZGdd�dej�ZGdd�dej�Zdd�Zedkr�e�ndS)�N)�verbose�
refcount_test�run_unittest�strip_python_stderr�cpython_only�
start_threads)�assert_python_ok�make_script�temp_dir)�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/python34/lib64/python3.4/test/test_gc.py�__new__szwith_tp_del.<locals>.C.__new__N)�__name__�
__module__�__qualname__rrrrr�Csr)�object)r
rrrrrsrc@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__AszUncollectable.__tp_del__)rrr�__doc__rr&rrrrr$4sr$c@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
edd��Zedd��Z
dd�Zedd��Zdd�Zdd�Zdd�Zedd ��Zed!d"��Zd#d$�Zejed%�d&d'��Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Z d4d5�Z!d6d7�Z"ed8d9��Z#ej$e%e&d:�d;�d<d=��Z'ej$e%e&d:�d;�d>d?��Z(d@dA�Z)dBS)C�GCTestscCs:g}|j|�tj�~|jtj�d�dS)N�)�append�gc�collect�assertEqual)r�lrrr�	test_listHs


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


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

zGCTests.test_tuplecCsCGdd�d�}||_tj�~|jtj�d�dS)Nc@seZdZdS)zGCTests.test_class.<locals>.AN)rrrrrrr�Aasr5r)�ar+r,�assertNotEqual)rr5rrr�
test_class`s
	
zGCTests.test_classcCs=Gdd�dt�}tj�~|jtj�d�dS)Nc@seZdZdS)z%GCTests.test_newstyleclass.<locals>.AN)rrrrrrrr5isr5r)rr+r,r7)rr5rrr�test_newstyleclasshs
zGCTests.test_newstyleclasscCsLGdd�d�}|�}||_tj�~|jtj�d�dS)Nc@seZdZdS)z GCTests.test_instance.<locals>.AN)rrrrrrrr5psr5r)r6r+r,r7)rr5r6rrr�
test_instanceos		
zGCTests.test_instancecCsZGdd�dt�}|�}||_tj�~|jtj�d�Gdd�dt�}Gdd�d||�}|�}||_tj�~|jtj�d�~~ttd�r�|jtj�d�n|jtj�d�|�|_~ttd�r*|jtj�d�n|jtj�d�|jtj�d�dS)	Nc@seZdZdS)z#GCTests.test_newinstance.<locals>.AN)rrrrrrrr5ysr5rc@seZdZdS)z#GCTests.test_newinstance.<locals>.BN)rrrrrrr�B�sr;c@seZdZdS)z#GCTests.test_newinstance.<locals>.CN)rrrrrrrr�sr�	getcounts)	rr6r+r,r7�list�hasattr�sysr-)rr5r6r;rrrr�test_newinstancexs.		
		
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)rrrrrrrrr5�sr5r)r+r,r7)rr5r6rrr�test_method�s
	
zGCTests.test_methodcCs�tGdd�d��}Gdd�d�}|�}||_t|�}|�}||_tj�~~|jtj�d�x:tjD]"}t|�|kr�|`Pq�q�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&rrrrr5�sr5c@seZdZdS)z(GCTests.test_legacy_finalizer.<locals>.BN)rrrrrrrr;�sr;rz&didn't find obj in garbage (finalizer))
rr6�id�br+r,r7�garbage�fail�remove)rr5r;r6�id_arC�objrrr�test_legacy_finalizer�s"				

zGCTests.test_legacy_finalizercCs�tGdd�dt��}Gdd�dt�}|�}||_t|�}|�}||_tj�~~|jtj�d�x:tjD]"}t|�|kr�|`Pq�q�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&rrrrr5�sr5c@seZdZdS)z1GCTests.test_legacy_finalizer_newclass.<locals>.BN)rrrrrrrr;�sr;rz&didn't find obj in garbage (finalizer))rrr6rBrCr+r,r7rDrErF)rr5r;r6rGrCrHrrr�test_legacy_finalizer_newclass�s$				

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


zGCTests.test_functioncCs7dd�}tj�|�|jtj�d�dS)NcSstj�}dS)N)r?�	_getframe)Zframerrr�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-rDr*rB�	get_debug�	set_debugZ
DEBUG_SAVEALL�len�pop)r�LZid_L�debugrHrrr�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)rrrrXrrrrr5sr5)r+�
get_threshold�enable�
set_threshold�disable)r�
thresholdsr5r6rrr�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)rrrrXrrrrr5sr5)r+rYrZr[rr\)rr]r5r6rrr�test_del_newclasss

	
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)rr6rC�c�xr0�erNrrr�test_get_count!s
zGCTests.test_get_countcCs�tj�g}tjd�tj�\}}}tjd�tj�\}}}tjd�tj�\}}	}
|j||fd�|j||fd�|j|	|
fd�dS)Nrr)r2)r)r)rr))rr)r+r,rar-)rrcr6rCrbr0rdrN�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]}i|d6��d6}q�Wq6Wtj�dS)Ncs(eZdZdZ�fdd�ZdS)z#GCTests.test_trashcan.<locals>.Ouchrcs4�jd�_�jddkr0tj�ndS)Nr)�r)�nr+r,)r)�OuchrrrXGsz+GCTests.test_trashcan.<locals>.Ouch.__del__N)rrrrjrXr)rkrrrkEsrk�r2r))r+rZ�ranger\)r�N�countr3r�u�vr)rkr�
test_trashcanDs
zGCTests.test_trashcanz*test meaningless on builds without threadscs0d�d}dd��G��fdd�dt����fdd����fd	d
�}tj�}tjd�zug�g}x3t|�D]%}tjd|�}|j|�q�Wt|�fd
d���t	j
d�WdQXWdtj|�Xtj�|j
t�j�t�j��dS)N�<r2cssz	dVWdtjd�XdS)z<A generator that releases the GIL when closed or dealloc'ed.Ng���ư>)�time�sleeprrrr�sleeper_genms	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)rrrrxsz1GCTests.test_trashcan_threads.<locals>.C.__init__cs'�jjd���}t|�dS)N)�delsr*�next)rrf)rrvrrrX{s	z0GCTests.test_trashcan_threads.<locals>.C.__del__N)rrrrwryrrXr)rrvrrrts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=r?�getswitchinterval�setswitchintervalrm�	threadingZThreadr*rrtrur+r,r-rRrwry)rZ	N_THREADSr~Zold_switchintervalZthreadsrr3r)rr{r}r|rvr�test_trashcan_threadsgs&

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,rRrDr-)rr�r6rC�
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__cSs1|jd7_|jdkr'|`nt�dS)Nr))rcr�r�)rr�rrrr��s	z-GCTests.test_boom2.<locals>.Boom2.__getattr__N)rrrrr�rrrr�Boom2�sr�r�)r�r+r,rRrDr-)rr�r6rCr�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,rRrDr-)rr�r6rCr�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__cSs1|jd7_|jdkr'|`nt�dS)Nr))rcr�r�)rr�rrrr��s	z5GCTests.test_boom2_new.<locals>.Boom2_New.__getattr__N)rrrrr�rrrr�	Boom2_New�sr�r�)rr�r+r,rRrDr-)rr�r6rCr�rrr�test_boom2_new�s
				
zGCTests.test_boom2_newcCs1dddg}tj|�}|j�|j||�t|�}tj|�}|j�|j||�idd6dd6}ddddg}tj|�}|j�|j||�tjddgidd6d
�}|j�|j|ddgttd���|jtjddd	�g�dS)Nr)�r`�r2r�rr6y@)rrr)r+Z
get_referents�sortr-�tupler=rm)rrxZgotZatupleZadictZexpectedrrr�test_get_referents�s"


"
&zGCTests.test_get_referentscCs�|jtjd��|jtjd��|jtjd��|jtjd
��|jtjd��|jtjd��|jtjd��|jtjd��|jtjtd���|jtjt��|jtjt��|jtjt��|jtjt���Gdd	�d	�}|jtjt��|jtj|��|jtj|���|jtjg��|jtjt���dS)Nr)g�?y@TF�ar6c@seZdZdS)z*GCTests.test_is_tracked.<locals>.UserClassN)rrrrrrr�	UserClass)sr�y�?@)	ZassertFalser+Z
is_tracked�	bytearray�type�intr�
assertTrue�set)rr�rrr�test_is_trackeds&zGCTests.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>6s	z>GCTests.test_bug1055820b.<locals>.callback.<locals>.<listcomp>r)r)�WRs�ouchrr�callback5sz*GCTests.test_bug1055820b.<locals>.callbackcSsg|]}t|��qSr)r)r�rrrrr�8s	z,GCTests.test_bug1055820b.<locals>.<listcomp>r2cs"g|]}tj|���qSr)r!r")r�rb)r�rrr�9s	r)rmr+r,r-rR)rZCsrbrcr)r�r�r�r�test_bug1055820b1s


zGCTests.test_bug1055820bcsZtj�Gdd�d��Gdd�d����fdd�}|�tj�dS)Nc@seZdZdS)z GCTests.test_bug21435.<locals>.AN)rrrrrrrr5Usr5c@s(eZdZdd�Zdd�ZdS)z GCTests.test_bug21435.<locals>.BcSs
||_dS)N)rc)rrcrrrrYsz)GCTests.test_bug21435.<locals>.B.__init__cSs
d|_dS)N)r�)rrrrrX\sz(GCTests.test_bug21435.<locals>.B.__del__N)rrrrrXrrrrr;Xsr;cs.��}����}||_||_dS)N)r�)r6rC)r5r;rr�do_work_s		z&GCTests.test_bug21435.<locals>.do_work)r+r,)rr�r)r5r;r�
test_bug21435Is

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�)�Popenr?�
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_shutdownis		z GCTests.test_garbage_at_shutdownr<z*types are immortal if COUNT_ALLOCS is usedcCs8d}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)rr-r�)rr��rc�out�errrrr�test_gc_main_module_at_shutdown�sz'GCTests.test_gc_main_module_at_shutdowncCsgt��X}d}d|f}t|d|�td|�\}}}|j|j�d�WdQXdS)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)r
r	rr-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�ntj�}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)r2)
r+Z	get_statsr-rR�assertIsInstance�dictr�ZassertGreaterEqual�	isenabledZ
addCleanuprZr\r,)rZstats�st�old�newrrr�test_get_stats�s.


$  
$ zGCTests.test_get_statsN)*rrrr/r1r4r8r9r:r@rArrIrJrLrrOrVr^r_rerhrr�unittestZ
skipUnlessr�r�r�r�r�r�r�r�r�r�r�ZskipIfr>r?r�r�r�rrrrr(GsB
	
	#; 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�|jrRtj	�ntj
�x,tjD]!}t|t
�rfd|_qfqfWtjdd�=|`tj
�dS)N)�visitr+r�rFr�r�rQrUr�rZr,rD�
isinstancer$r%r�)rrHrrr�tearDown�s	

zGCCallbackTests.tearDowncCsWg|_tj�tjdd�g}tjdd�<|jj|�g|_dS)N)r�r+r,rDr�r*)rrDrrr�preclean�s
	
'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|_qzWndS)Nr2�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�r>r+rDr%)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)r2r)r�rrrrr�s	r)r2cSsg|]}|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)Nr2r�)r�r+r,r�r-)rrqr�rrr�test_collect_generation)s



z'GCCallbackTests.test_collect_generationcCsm|j�t�t�td�tj�xY|jD]N}|ddkrRq6n|d}|j|dd�|j|dd�q6W|jttj�d�x!tjD]}|j	|t�q�Wd	|_
g|_gtjdd�<tj�xY|jD]N}|ddkrq�n|d}|j|dd
�|j|dd�q�W|jttj�d
�dS)Ni�r)r�r2r�r��r�Tr)r�r$rr+r,r�r-rRrDr�r�)rrqr�rdrrr�test_collect_garbage0s2



		

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�VszGCTogglingTests.setUpcCstj�dS)N)r+r\)rrrrr�YszGCTogglingTests.tearDownc
s0td�}tj�td�}||_|`td�}tj|��g���fdd�}tj||�}d}}}g}d}t�}xV|js�|d7}|dkr�|j	d�n|j
t��d�|jg�q�W|j
t��d�x�D]}	|j
|	d�qWdS)Nrr)r2cs��g�dd�<dS)Nr)r)�c2wrr�rrr�lsz2GCTogglingTests.test_bug1055820c.<locals>.callbacki'z'gc didn't happen after 10000 iterations)
rr+r,Z
keep_c0_aliverr!r"rrrEr-rRr*)
rZc0�c1�c2r�Zc0wr�junkr�detectorrcr)r�r�r�test_bug1055820c\s.
	 	

z GCTogglingTests.test_bug1055820cc	s(g�G��fdd�dt�}|d�}tj�td�}||_|`td�}tj|��d}}}t�}g}d}xV|js�|d7}|dkr�|j	d�n|j
t��d�|jg�q�W|j
t��d�x�D]}|j
|d�q
WdS)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)r2i'z'gc didn't happen after 10000 iterations)
rr+r,Z
keep_d0_aliverr!r"rrrEr-rRr*)	rr�Zd0r�r�r�r�rrcr)r�r�r�test_bug1055820d�s,
		

z GCTogglingTests.test_bug1055820dN)rrrr�r�r�r�rrrrr�UsFr�cCs�tj�}tj�tj�s)t�tj�}tj|tj@�ztj�tt	t
t�Wdtj|�tr�t
d�ntj�tj�s�t�|s�tj�nXdS)Nzrestoring automatic collection)r+r�r\�AssertionErrorrPrQZ
DEBUG_LEAKr,rr(r�r�r�printrZ)r�rUrrr�	test_main�s




r��__main__)r�Ztest.supportrrrrrrZtest.script_helperrr	r
r?rtr+r!r��ImportErrorZ	_testcapirrrrr$ZTestCaser(r�r�r�rrrrr�<module>s4.

���z�