Server : LiteSpeed
System : Linux server51.dnsbootclub.com 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64
User : nandedex ( 1060)
PHP Version : 8.1.33
Disable Function : NONE
Directory :  /opt/cppython/lib/python3.8/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]


Current File : //opt/cppython/lib/python3.8/test/__pycache__/test_gc.cpython-38.pyc
U

>��g��@shddlZddlmZmZmZmZmZmZmZm	Z	m
Z
mZmZddl
mZmZddlZddlZddlZddlZddlZddlZddlZzddlmZWnek
r�dd�ZYnXGdd�de�ZGd	d
�d
e�ZeGdd�de��Ze���d
d��r
de��d
kZ ne!ed�Z Gdd�dej"�Z#Gdd�dej"�Z$Gdd�dej"�Z%dd�Z&e'dk�rde&�dS)�N)�verbose�
refcount_test�run_unittest�strip_python_stderr�cpython_only�
start_threads�temp_dir�requires_type_collecting�TESTFN�unlink�
import_module)�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�+/opt/cppython/lib/python3.8/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�rrrr!rrrrr!src@seZdZdd�ZdS)�GC_Detectorcs(d�_�fdd�}t�td�|��_dS)NFcs
d�_dS)NT)�gc_happened�Zignored�r rr�it_happened-sz)GC_Detector.__init__.<locals>.it_happened�)r$�weakref�refr�wr)r r'rr&rr!*szGC_Detector.__init__Nr"rrrrr#&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-)r r-rrrr!<szUncollectable.__init__cCsdSrrr&rrr�
__tp_del__AszUncollectable.__tp_del__)N)rrr�__doc__r!r.rrrrr,4s
r,Z	PY_CFLAGS�z-DNDEBUGZgettotalrefcountc@sTeZdZdd�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'dEdF�Z(dGdH�Z)dIS)J�GCTestscCs,g}|�|�t��~|�t��d�dS�N���append�gc�collect�assertEqual)r �lrrr�	test_listPs

zGCTests.test_listcCs*i}||d<t��~|�t��d�dSr2�r6r7r8�r �drrr�	test_dictWs
zGCTests.test_dictcCs4g}|f}|�|�t��~~|�t��d�dS)N�r4)r r9�trrr�
test_tuple^s
zGCTests.test_tuplecCs2Gdd�d�}||_t��~|�t��d�dS)Nc@seZdZdS)zGCTests.test_class.<locals>.AN�rrrrrrr�AisrCr��ar6r7�assertNotEqual�r rCrrr�
test_classhs
zGCTests.test_classcCs.Gdd�dt�}t��~|�t��d�dS)Nc@seZdZdS)z%GCTests.test_newstyleclass.<locals>.ANrBrrrrrCqsrCr)rr6r7rFrGrrr�test_newstyleclasspszGCTests.test_newstyleclasscCs8Gdd�d�}|�}||_t��~|�t��d�dS)Nc@seZdZdS)z GCTests.test_instance.<locals>.ANrBrrrrrCxsrCrrD�r rCrErrr�
test_instancews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>.ANrBrrrrrC�srCrc@seZdZdS)z#GCTests.test_newinstance.<locals>.BNrBrrrr�B�srLc@seZdZdS)z#GCTests.test_newinstance.<locals>.CNrBrrrrr�sr)rrEr6r7rF�listr8)r rCrErLrrrr�test_newinstance�s&zGCTests.test_newinstancecCs2Gdd�d�}|�}t��~|�t��d�dS)Nc@seZdZdd�ZdS)zGCTests.test_method.<locals>.AcSs|j|_dSr)r!Zinitr&rrrr!�sz'GCTests.test_method.<locals>.A.__init__Nr"rrrrrC�srCr)r6r7rFrJrrr�test_method�s
zGCTests.test_methodcCs�tGdd�d��}Gdd�d�}|�}||_t|�}|�}||_t��~~|�t��d�tjD]}t|�|krb|`q�qb|�d�tj�	|�dS)Nc@seZdZdd�ZdS)z(GCTests.test_legacy_finalizer.<locals>.AcSsdSrrr&rrrr.��z3GCTests.test_legacy_finalizer.<locals>.A.__tp_del__N�rrrr.rrrrrC�srCc@seZdZdS)z(GCTests.test_legacy_finalizer.<locals>.BNrBrrrrrL�srLr�&didn't find obj in garbage (finalizer))
rrE�id�br6r7rF�garbage�fail�remove�r rCrLrEZid_arT�objrrr�test_legacy_finalizer�s$

zGCTests.test_legacy_finalizercCs�tGdd�dt��}Gdd�dt�}|�}||_t|�}|�}||_t��~~|�t��d�tjD]}t|�|krf|`q�qf|�	d�tj�
|�dS)Nc@seZdZdd�ZdS)z1GCTests.test_legacy_finalizer_newclass.<locals>.AcSsdSrrr&rrrr.�rPz<GCTests.test_legacy_finalizer_newclass.<locals>.A.__tp_del__NrQrrrrrC�srCc@seZdZdS)z1GCTests.test_legacy_finalizer_newclass.<locals>.BNrBrrrrrL�srLrrR)rrrErSrTr6r7rFrUrVrWrXrrr�test_legacy_finalizer_newclass�s$

z&GCTests.test_legacy_finalizer_newclasscCs,i}td|�t��~|�t��d�dS)Nzdef f(): pass
r?)�execr6r7r8r<rrr�
test_function�s

zGCTests.test_functioncCs*dd�}t��|�|�t��d�dS)NcSst��}dSr)�sys�	_getframe)�framerrr�f�szGCTests.test_frame.<locals>.fr3r;)r rarrr�
test_frame�szGCTests.test_framecCs�t��|�tjg�g}|�|�t|�}t��}t�|tjB�~t��t�|�|�t	tj�d�tj�
�}|�t|�|�dSr2)r6r7r8rUr5rS�	get_debug�	set_debugZ
DEBUG_SAVEALL�len�pop)r �LZid_L�debugrYrrr�test_saveall�s


zGCTests.test_saveallcCsFt��}t��t�d�Gdd�d�}|�}~t��tj|�dS)Nr3c@seZdZdd�ZdS)zGCTests.test_del.<locals>.AcSst|�dSr��dirr&rrr�__del__sz#GCTests.test_del.<locals>.A.__del__N�rrrrlrrrrrCsrC)r6�
get_threshold�enable�
set_threshold�disable�r Z
thresholdsrCrErrr�test_dels
zGCTests.test_delcCsHt��}t��t�d�Gdd�dt�}|�}~t��tj|�dS)Nr3c@seZdZdd�ZdS)z$GCTests.test_del_newclass.<locals>.AcSst|�dSrrjr&rrrrlsz,GCTests.test_del_newclass.<locals>.A.__del__NrmrrrrrCsrC)r6rnrorprrqrrrrr�test_del_newclasss
zGCTests.test_del_newclasscCsdt��t��\}}}g}t��\}}}|�||fd�|�||fd�|�|d�|�||�dS)N�rr�)r6r7�	get_countr8Z
assertLess�
assertGreater)r rErT�c�xr=�erarrr�test_get_count$szGCTests.test_get_countcCs�t��g}t�d�t��\}}}t�d�t��\}}}t�d�t��\}}	}
|�||fd�|�||fd�|�|	|
fd�dS)Nrr3r?)r3r)rr3ru)r6r7rwr8)r rzrErTryr=r{ra�g�hrrrr�test_collect_generations2s


z GCTests.test_collect_generationscs�G�fdd�d��t��d}td�D]Z}g}t|�D]}|��g}q6g}t|�D]}|��g}qRi}t|�D]}|��d�}qnq&t��dS)NcseZdZdZ�fdd�ZdS)z#GCTests.test_trashcan.<locals>.Ouchrcs&�jd�_�jddkr"t��dS)Nr3�r)�nr6r7r&��OuchrrrlJsz+GCTests.test_trashcan.<locals>.Ouch.__del__N)rrrr�rlrr�rrr�Hsr��r?)r3r?)r6ro�rangerq)r �N�countr@r�u�vrr�r�
test_trashcanGszGCTests.test_trashcanc	s�d�d}dd��G��fdd�dt����fdd����fd	d
�}t��}t�d�zXg�g}t|�D]}tj|d�}|�|�qft|�fd
d���t	�
d�W5QRXW5t�|�Xt��|�
t�j�t�j��dS)N�<r?c	ssz
dVW5t�d�XdS)z<A generator that releases the GIL when closed or dealloc'ed.g���ư>N)�time�sleeprrrr�sleeper_genos
z2GCTests.test_trashcan_threads.<locals>.sleeper_gencs.eZdZgZgZ�fdd�Z��fdd�ZdS)z(GCTests.test_trashcan_threads.<locals>.Ccs||dd�<�j�d�dSr)�initsr5)r �alist)rrrr!zsz1GCTests.test_trashcan_threads.<locals>.C.__init__cs�j�d���}t|�dSr)�delsr5�next)r r}�rr�rrrl}sz0GCTests.test_trashcan_threads.<locals>.C.__del__N)rrrr�r�r!rlrr�rrrvsrcs(�g�}t��D]}�|g�g}q~dS)zyCreate a sufficiently nested container object so that the
            trashcan mechanism is invoked when deallocating it.N)r�)rzr)r�NESTINGrr�make_nested�sz2GCTests.test_trashcan_threads.<locals>.make_nestedcs�s��qdS)z!Exercise make_nested() in a loop.Nrr)�exitr�rr�
run_thread�sz1GCTests.test_trashcan_threads.<locals>.run_threadg�h㈵��>)�targetcs
��d�Sr2�r5r)r�rr�<lambda>�rPz/GCTests.test_trashcan_threads.<locals>.<lambda>��?)rMr^�getswitchinterval�setswitchintervalr��	threading�Threadr5rr�r�r6r7r8rer�r�)r Z	N_THREADSr�Zold_switchinterval�threadsrr@r)rr�r�r�r�r�test_trashcan_threadsjs&
zGCTests.test_trashcan_threadscCsbGdd�d�}|�}|�}||_||_t��ttj�}~~|�t��d�|�ttj�|�dS)Nc@seZdZdd�ZdS)zGCTests.test_boom.<locals>.BoomcSs|`t�dSr��attr�AttributeError�r Z
someattributerrr�__getattr__�sz+GCTests.test_boom.<locals>.Boom.__getattr__N�rrrr�rrrr�Boom�sr���r�r6r7rerUr8)r r�rErT�
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�rzr&rrrr!�sz*GCTests.test_boom2.<locals>.Boom2.__init__cSs$|jd7_|jdkr|`t�dSr2�rzr�r�r�rrrr��s
z-GCTests.test_boom2.<locals>.Boom2.__getattr__N�rrrr!r�rrrr�Boom2�sr�r�r�)r r�rErTr�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�dSrr�r�rrrr��sz3GCTests.test_boom_new.<locals>.Boom_New.__getattr__Nr�rrrr�Boom_New�sr�r��rr�r6r7rerUr8)r r�rErTr�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|_dSr�r�r&rrrr!�sz2GCTests.test_boom2_new.<locals>.Boom2_New.__init__cSs$|jd7_|jdkr|`t�dSr2r�r�rrrr��s
z5GCTests.test_boom2_new.<locals>.Boom2_New.__getattr__Nr�rrrr�	Boom2_New�sr�r�r�)r r�rErTr�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)Nr3�rv�)r3rvr?r�)rrrrrEy@)r6Z
get_referents�sortr8�tuplerMr�)r r�ZgotZatupleZadictZexpectedrrr�test_get_referentss"




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)Nr3r�y�?@TF�arEc@seZdZdS)z*GCTests.test_is_tracked.<locals>.UserClassNrBrrrr�	UserClass+sr�c@seZdZdS)z(GCTests.test_is_tracked.<locals>.UserIntNrBrrrr�UserInt.sr�c@seZdZdZdS)z/GCTests.test_is_tracked.<locals>.UserClassSlotsrN�rrr�	__slots__rrrr�UserClassSlots2sr�c@seZdZdZdS)z/GCTests.test_is_tracked.<locals>.UserFloatSlotsrNr�rrrr�UserFloatSlots6sr�c@seZdZdZdS)z-GCTests.test_is_tracked.<locals>.UserIntSlotsrNr�rrrr�UserIntSlots:sr�)
�assertFalser6Z
is_tracked�	bytearray�type�intr�float�
assertTrue�set)r r�r�r�r�r�rrr�test_is_trackeds6zGCTests.test_is_trackedcs�g���fdd��dd�td�D�}�fdd�|D��d}t��|�t��d�d}t��|�t��d��D]}|�|d�qrdS)Ncsdd��D��dd�<dS)NcSsg|]
}|��qSrr)�.0r+rrr�
<listcomp>Lsz>GCTests.test_bug1055820b.<locals>.callback.<locals>.<listcomp>rr%)�WRs�ouchrr�callbackKsz*GCTests.test_bug1055820b.<locals>.callbackcSsg|]}t|��qSr)r�r�rrrrr�Nsz,GCTests.test_bug1055820b.<locals>.<listcomp>r?csg|]}t�|���qSr)r)r*)r�ry)r�rrr�Osr)r�r6r7r8re)r ZCsryrzr)r�r�r�r�test_bug1055820bGszGCTests.test_bug1055820bcsDt��Gdd�d��Gdd�d����fdd�}|�t��dS)Nc@seZdZdS)z GCTests.test_bug21435.<locals>.ANrBrrrrrCksrCc@seZdZdd�Zdd�ZdS)z GCTests.test_bug21435.<locals>.BcSs
||_dSrr�)r rzrrrr!osz)GCTests.test_bug21435.<locals>.B.__init__cSs
d|_dSr�r�r&rrrrlrsz(GCTests.test_bug21435.<locals>.B.__del__N)rrrr!rlrrrrrLnsrLcs ��}����}||_||_dSrr�)rErT�rCrLrr�do_workus
z&GCTests.test_bug21435.<locals>.do_work)r6r7)r r�rr�r�
test_bug21435_s
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-Wd�-c��stdout�stderrrrP)�Popenr^�
executable�PIPE�communicater��closer�r8�
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�)r r�r�r�rr�r�test_garbage_at_shutdowns&���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)
            r��__del__ called)r
r8r�)r r��rc�out�errrrr�test_gc_main_module_at_shutdown�sz'GCTests.test_gc_main_module_at_shutdownc	CsPt��@}d}d|f}t|d|�td|�\}}}|�|��d�W5QRXdS)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
                Zgctestr�r�)rrr
r8r�)r Z
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��}|�|�W5QRXtt�\}}}|�|��d�dS)Nz�if 1:
            class ClassWithDel:
                def __del__(self):
                    print('__del__ called')
            a = ClassWithDel()
            a.link = a
            raise SystemExit(0)�wr�)�
addCleanuprr
�open�writer
r8r�)r r�Zscriptr�r�r�rrr�test_global_del_SystemExit�sz"GCTests.test_global_del_SystemExitcCstt��}|�t|�d�|D]V}|�|t�|�t|�dddh�|�|dd�|�|dd�|�|dd�qt��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�
uncollectablerr3r?)
r6�	get_statsr8re�assertIsInstance�dictr�ZassertGreaterEqual�	isenabledr�rorqr7)r Zstats�st�old�newrrr�test_get_stats�s0
�
 
 zGCTests.test_get_statscCs4t��|�t��d�t��|�t��d�dSr�)r6ZfreezerxZget_freeze_countZunfreezer8r&rrr�test_freeze�szGCTests.test_freezecs�t��g�����|�t�fdd�tjdd�D���|�t�fdd�tjdd�D���|�t�fdd�tjdd�D���tjdd�|�t�fd	d�tjdd�D���|�t�fd
d�tjdd�D���|�t�fdd�tjdd�D���tjdd�|�t�fdd�tjdd�D���|�t�fd
d�tjdd�D���|�t�fdd�tjdd�D���tjdd�|�t�fdd�tjdd�D���|�t�fdd�tjdd�D���|�t�fdd�tjdd�D����t��dS)Nc3s|]}�|kVqdSrr�r��element�r9rr�	<genexpr>sz+GCTests.test_get_objects.<locals>.<genexpr>r��
generationc3s|]}�|kVqdSrrrrrrr	sr3c3s|]}�|kVqdSrrrrrrrsr?c3s|]}�|kVqdSrrrrrrrsc3s|]}�|kVqdSrrrrrrrsc3s|]}�|kVqdSrrrrrrrsc3s|]}�|kVqdSrrrrrrrsc3s|]}�|kVqdSrrrrrrrsc3s|]}�|kVqdSrrrrrrr sc3s|]}�|kVqdSrrrrrrr$sc3s|]}�|kVqdSrrrrrrr'sc3s|]}�|kVqdSrrrrrrr*s)r6r7r5r��any�get_objectsr�r&rrr�test_get_objectssX
������������zGCTests.test_get_objectscCslt��|�tt���ttjdd���|�ttjd�|�ttjd�|�ttjd�|�ttjd�dS)Nri�i����1gX9��v��?)r6r7r8rer	ZassertRaises�
ValueErrorrr&rrr�test_get_objects_arguments/s�z"GCTests.test_get_objects_argumentscs�d}Gdd�d�}G�fdd�d|�}g�dd�}t��t��|�\}}t|�D]
}|�qTt��}|�\}	}
|�|d|�|�|	|d|�|�|
|d	�|	|
}}|�t��}|�\}	}
|�|d	�|�|	|d	�|�|
|d	�|	|
}}t|�D]}|��q|�t��}|�\}	}
|�|d	�|�|	|d	�|�|
|d	�|	|
}}t��}|�\}	}
|�|d|�|�|	|d|�|�|
|d	�t��dS)
N�dc@seZdZdd�ZdS)zGCTests.test_38379.<locals>.AcSs
||_dSr)�mer&rrrr!@sz&GCTests.test_38379.<locals>.A.__init__Nr"rrrrrC?srCcseZdZ�fdd�ZdS)zGCTests.test_38379.<locals>.Zcs��|�dSrr�r&�ZzsrrrlDsz%GCTests.test_38379.<locals>.Z.__del__Nrmrrrr�ZCsrcSst��d}|d|dfS)N���r�r�)r6r�)r=rrr�getstatsIsz$GCTests.test_38379.<locals>.getstatsr?r)r6r7rqr�r8ro)r r�rCrrZoldcZoldncrr@ryZncrrr�
test_383799sL








zGCTests.test_38379N)*rrrr:r>rArHrIrKr	rNrOrrZr[r]rrbrirsrtr|rr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr
r
rrrrrr1Os\
	



	



#:/ 
0



.
r1c@sdeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	e
dd��Ze�
ed�dd��ZdS)�GCCallbackTestscCsLt��|_t��t��|_t�d�tj�|j	�tj�|j
�g|_dSr�)r6r��enabledrqrcrhrd�	callbacksr5�cb1�cb2�othergarbager&rrr�setUp�s


zGCCallbackTests.setUpcCsz|`tj�|j�tj�|j�t�|j�|jr:t�	�t�
�tjD]}t|t
�rHd|_qHtjdd�=|`t�
�dSr)�visitr6rrWrrrdrhrror7rU�
isinstancer,r-r)r rYrrr�tearDown�s

zGCCallbackTests.tearDowncCsBg|_t��tjdd�g}tjdd�<|j�|�g|_dSr)rr6r7rUrr5)r rUrrr�preclean�s
zGCCallbackTests.precleancCs|j�d|t|�f�dSr2)rr5r�)r �phase�inforrrr�szGCCallbackTests.cb1cCsf|j�d|t|�f�|dkrbt|d�rbdd�tjD�}dd�tjD�tjdd�<|D]
}d|_qVdS)Nr?�stop�cleanupcSsg|]}t|t�r|�qSr�rr,�r�r{rrrr��s
z'GCCallbackTests.cb2.<locals>.<listcomp>cSsg|]}t|t�s|�qSrr$r%rrrr��s
�)rr5r��hasattrr6rUr-)r r r!Zucr{rrrr�szGCCallbackTests.cb2cCs�|��t��dd�|jD�}dd�|D�}dd�|D�}|�|dgd�|�|dgd�dd�|jD�}dd�|D�}d	d�|D�}|�|d
gd�|�|dgd�|jD]6}|d}|�d|k�|�d
|k�|�d|k�q�dS)NcSsg|]}|d�qS)rr�r�r�rrrr��sz0GCCallbackTests.test_collect.<locals>.<listcomp>cSsg|]}|dkr|�qS�r3rr�rrrr��scSsg|]}|dkr|�qS)r?rr�rrrr��sr3r?cSsg|]}|d�qSr(rr'rrrr��scSsg|]}|dkr|�qS)�startrr�rrrr��scSsg|]}|dkr|�qS)r"rr�rrrr��sr)r"rr�r�)rr6r7rr8r�)r r�Zn1Zn2r�r!rrr�test_collect�s"
zGCCallbackTests.test_collectcCs:|��t�d�|jD]}|d}|�|dd�qdS)Nr?r)rr6r7rr8)r r�r!rrr�test_collect_generation�s


z'GCCallbackTests.test_collect_generationcCs
|��t�t�td�t��|jD]:}|ddkr<q*|d}|�|dd�|�|dd�q*|�ttj�d�tjD]}|�	|t�q~d	|_
g|_gtjdd�<t��|jD]:}|ddkr�q�|d}|�|dd
�|�|dd�q�|�ttj�d
�dS)Nr(r3r"r?r�r��r�Tr)rr,rr6r7rr8rerUr�r#)r r�r!r{rrr�test_collect_garbage�s2


z$GCCallbackTests.test_collect_garbagezbuilt with -NDEBUGcCs�|��td�ddl}t�d�}|jtjd|g|j|jd�}|�	�\}}|j
��|j��|�
|d�|�
|d�d}|�
|d	|�|�
|d
�|�
|d|�|�
|d�|�
|d
�dS)NZctypesra�
            from test.support import gc_collect, SuppressCrashReport

            a = [1, 2, 3]
            b = [a]

            # Avoid coredump when Py_FatalError() calls abort()
            SuppressCrashReport().__enter__()

            # Simulate the refcount of "a" being too low (compared to the
            # references held on it by live data), but keeping it above zero
            # (to avoid deallocating it):
            import ctypes
            ctypes.pythonapi.Py_DecRef(ctypes.py_object(a))

            # The garbage collector should now have a fatal error
            # when it reaches the broken object
            gc_collect()
        r�r�sGgcmodule\.c:[0-9]+: gc_decref: Assertion "gc_get_refs\(g\) > 0" failed.srefcount is too smalls
[0-9a-fA-Fx]+sobject address  : sobject refcount : 1sobject type     : sobject type name: listsobject repr     : \[1, 2, 3\])rrr��textwrap�dedentr�r^r�r�r�r�r�r�ZassertRegex)r r�r�r�r�r�Z
address_regexrrr�test_refcount_errors�sB
�

�������z$GCCallbackTests.test_refcount_errorsN)rrrrrrrrr*r+rr-�unittestZskipIf�BUILD_WITH_NDEBUGr0rrrrr�s



$�rc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�GCTogglingTestscCst��dSr)r6ror&rrrr2szGCTogglingTests.setUpcCst��dSr)r6rqr&rrrr5szGCTogglingTests.tearDownc
s�td�}t��td�}||_|`td�}t�|��g���fdd�}t�||�}d}}}g}d}t�}|js�|d7}|dkr�|�	d�|�
t��d�|�g�ql|�
t��d��D]}	|�
|	d�q�dS)Nrr3r?cs��g�dd�<dSrrr%�Zc2wrr�rrr�Hsz2GCTogglingTests.test_bug1055820c.<locals>.callback�'�'gc didn't happen after 10000 iterations)
rr6r7Z
keep_c0_aliverr)r*r#r$rVr8rer5)
r Zc0�c1�c2r�Zc0wr�junkr�detectorrzrr4r�test_bug1055820c8s.
 
z GCTogglingTests.test_bug1055820cc	s�g�G��fdd�dt�}|d�}t��td�}||_|`td�}t�|��d}}}t�}g}d}|js�|d7}|dkr�|�	d�|�
t��d�|�g�qh|�
t��d��D]}|�
|d�q�dS)NcseZdZ��fdd�ZdS)z+GCTogglingTests.test_bug1055820d.<locals>.Dcs��g�dd�<dSrrr&r4rrrl�sz3GCTogglingTests.test_bug1055820d.<locals>.D.__del__Nrmrr4rr�D�sr<rr3r?r5r6)
rr6r7Z
keep_d0_aliverr)r*r#r$rVr8rer5)	r r<Zd0r7r8r:r9rrzrr4r�test_bug1055820d~s,

z GCTogglingTests.test_bug1055820dN)rrrrrr;r=rrrrr31sFr3c	Cs�t��}t��t��rt�t��}t�|tj@�zt�
�ttt
t�W5t�|�trftd�t�	�t��szt�|s�t��XdS)Nzrestoring automatic collection)r6r�rq�AssertionErrorrcrdZ
DEBUG_LEAKr�printror7rr1r3r)rrhrrr�	test_main�s
r@�__main__)(r1Ztest.supportrrrrrrrr	r
rrZtest.support.script_helperr
rr6r^Z	sysconfigr.r�r�r)Z	_testcapir�ImportErrorrrr#r,Zget_config_vars�getr2r&ZTestCaser1rr3r@rrrrr�<module>sD472


F1le Man4ger