a 5êdg~³ã@sŽddlZddlZddlmZmZmZmZmZmZm Z m Z m Z ddl m Z mZddlZddlZddlZddlZddlZddlZddlZzddlmZWney®dd„ZYn0zddlmZWneyÖdZYn0Gdd „d eƒZGd d „d eƒZeGd d „d eƒƒZe ¡ dd¡r0de ¡dvZ n e!edƒ Z Gdd„dej"ƒZ#Gdd„dej"ƒZ$Gdd„dej"ƒZ%dd„Z&e'dkrŠe&ƒdS)éN) ÚverboseÚ refcount_testÚ run_unittestÚ cpython_onlyÚ start_threadsÚtemp_dirÚTESTFNÚunlinkÚ import_module)Úassert_python_okÚ make_script)Ú with_tp_delcCsGdd„dtƒ}|S)Nc@seZdZdd„ZdS)zwith_tp_del..Cc_s tdƒ‚dS)Nzrequires _testcapi.with_tp_del)Ú TypeError)ÚclsÚargsÚkwargs©rú(/usr/local/lib/python3.9/test/test_gc.pyÚ__new__szwith_tp_del..C.__new__N)Ú__name__Ú __module__Ú __qualname__rrrrrÚCsr)Úobject)rrrrrr sr )Ú ContainerNoGCc@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©rrrÚ it_happened3sz)GC_Detector.__init__..it_happenedéš)r#ÚweakrefÚrefrÚwr)rr&rr%rr 0s zGC_Detector.__init__Nr!rrrrr",sr"c@seZdZddd„Zdd„ZdS)Ú UncollectableNcCs |durt|d|_n||_dS)N)Úpartner)r+r,)rr,rrrr BszUncollectable.__init__cCsdSrrr%rrrÚ __tp_del__GszUncollectable.__tp_del__)N)rrrr r-rrrrr+:s r+Z PY_CFLAGSÚz-DNDEBUGZgettotalrefcountc@steZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z e dd„ƒZ e dd„ƒZ dd„Zedd„ƒZdd„Zdd„Zdd„Zedd „ƒZed!d"„ƒZd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Z e d9d:„ƒZ!d;d<„Z"d=d>„Z#d?d@„Z$dAdB„Z%dCdD„Z&dEdF„Z'dGdH„Z(dIdJ„Z)dKdL„Z*dMdN„Z+e, -e.dOudP¡dQdR„ƒZ/dOS)SÚGCTestscCs,g}| |¡t ¡~| t ¡d¡dS©Né©ÚappendÚgcÚcollectÚ assertEqual)rÚlrrrÚ test_listVs  zGCTests.test_listcCs*i}||d<t ¡~| t ¡d¡dSr0©r4r5r6©rÚdrrrÚ test_dict]s zGCTests.test_dictcCs4g}|f}| |¡t ¡~~| t ¡d¡dS)Nér2)rr7ÚtrrrÚ test_tupleds zGCTests.test_tuplecCs2Gdd„dƒ}||_t ¡~| t ¡d¡dS)Nc@s eZdZdS)zGCTests.test_class..AN©rrrrrrrÚAosrAr©Úar4r5ÚassertNotEqual©rrArrrÚ test_classns zGCTests.test_classcCs.Gdd„dtƒ}t ¡~| t ¡d¡dS)Nc@s eZdZdS)z%GCTests.test_newstyleclass..ANr@rrrrrAwsrAr)rr4r5rDrErrrÚtest_newstyleclassvszGCTests.test_newstyleclasscCs8Gdd„dƒ}|ƒ}||_t ¡~| t ¡d¡dS)Nc@s eZdZdS)z GCTests.test_instance..ANr@rrrrrA~srArrB©rrArCrrrÚ test_instance}s 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..ANr@rrrrrA‡srArc@s eZdZdS)z#GCTests.test_newinstance..BNr@rrrrÚBŽsrJc@s eZdZdS)z#GCTests.test_newinstance..CNr@rrrrrsr)rrCr4r5rDÚlistr6)rrArCrJrrrrÚtest_newinstance†s&zGCTests.test_newinstancecCs2Gdd„dƒ}|ƒ}t ¡~| t ¡d¡dS)Nc@seZdZdd„ZdS)zGCTests.test_method..AcSs |j|_dSr)r Úinitr%rrrr ¡sz'GCTests.test_method..A.__init__Nr!rrrrrA srAr)r4r5rDrHrrrÚ 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..AcSsdSrrr%rrrr-®óz3GCTests.test_legacy_finalizer..A.__tp_del__N©rrrr-rrrrrA¬srAc@s eZdZdS)z(GCTests.test_legacy_finalizer..BNr@rrrrrJ¯srJrú&didn't find obj in garbage (finalizer)) r rCÚidÚbr4r5rDÚgarbageÚfailÚremove©rrArJrCZid_arSÚ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..AcSsdSrrr%rrrr-ÈrOz.A.__tp_del__NrPrrrrrAÆsrAc@s eZdZdS)z1GCTests.test_legacy_finalizer_newclass..BNr@rrrrrJÉsrJrrQ) r rrCrRrSr4r5rDrTrUrVrWrrrÚtest_legacy_finalizer_newclassÂs$   z&GCTests.test_legacy_finalizer_newclasscCs,i}td|ƒt ¡~| t ¡d¡dS)Nzdef f(): pass r=)Úexecr4r5r6r:rrrÚ test_functionÜs  zGCTests.test_functioncCs*dd„}t ¡|ƒ| t ¡d¡dS)NcSs t ¡}dSr)ÚsysÚ _getframe)ÚframerrrÚfçszGCTests.test_frame..fr1r9)rr`rrrÚ test_frameåszGCTests.test_framecCsˆt ¡| tjg¡g}| |¡t|ƒ}t ¡}t |tjB¡~t ¡t |¡| t tjƒd¡tj  ¡}| t|ƒ|¡dSr0) r4r5r6rTr3rRÚ get_debugÚ set_debugZ DEBUG_SAVEALLÚlenÚpop)rÚLZid_LÚdebugrXrrrÚ test_saveallís   zGCTests.test_saveallcCsFt ¡}t ¡t d¡Gdd„dƒ}|ƒ}~t ¡tj|ŽdS)Nr1c@seZdZdd„ZdS)zGCTests.test_del..AcSs t|ƒdSr©Údirr%rrrÚ__del__ sz#GCTests.test_del..A.__del__N©rrrrkrrrrrA srA)r4Ú get_thresholdÚenableÚ set_thresholdÚdisable©rZ thresholdsrArCrrrÚtest_dels zGCTests.test_delcCsHt ¡}t ¡t d¡Gdd„dtƒ}|ƒ}~t ¡tj|ŽdS)Nr1c@seZdZdd„ZdS)z$GCTests.test_del_newclass..AcSs t|ƒdSrrir%rrrrksz,GCTests.test_del_newclass..A.__del__NrlrrrrrAsrA)r4rmrnrorrprqrrrÚtest_del_newclasss zGCTests.test_del_newclasscCsdt ¡t ¡\}}}g}t ¡\}}}| ||fd¡| ||fd¡| |d¡| ||¡dS)N©rré)r4r5Ú get_countr6Z assertLessÚ assertGreater)rrCrSÚcÚxr;Úer`rrrÚtest_get_count)s zGCTests.test_get_countc Csˆt ¡g}t d¡t ¡\}}}t d¡t ¡\}}}t d¡t ¡\}} } | ||fd¡| ||fd¡| | | fd¡dS)Nrr1r=)r1r)rr1rt)r4r5rvr6) rryrCrSrxr;rzr`ÚgÚhrrrrÚtest_collect_generations7s   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..Ouchrcs&ˆjdˆ_ˆjddkr"t ¡dS)Nr1ér)Únr4r5r%©ÚOuchrrrkOs z+GCTests.test_trashcan..Ouch.__del__N)rrrr€rkrrrrr‚Msr‚é–r=)r1r=)r4rnÚrangerp)rÚNÚcountr>rÚuÚvrrrÚ test_trashcanLs      zGCTests.test_trashcanc süd‰d}dd„‰G‡‡fdd„dtƒ‰‡‡fdd„‰‡‡fd d „}t ¡}t d ¡zvg‰g}t|ƒD]}tj|d }| |¡qft|‡fd d„ƒt   d¡Wdƒn1s´0YWt |¡n t |¡0t   ¡|  tˆjƒtˆjƒ¡dS)Né<r=c ss&zdVWt d¡n t d¡0dS)Ngíµ ÷ư>)ÚtimeÚsleeprrrrÚ sleeper_gentsz2GCTests.test_trashcan_threads..sleeper_gencs.eZdZgZgZ‡fdd„Z‡‡fdd„ZdS)z(GCTests.test_trashcan_threads..Ccs||dd…<ˆj d¡dSr)Úinitsr3)rÚalist)rrrr s z1GCTests.test_trashcan_threads..C.__init__csˆj d¡ˆƒ}t|ƒdSr)Údelsr3Únext)rr|©rrrrrk‚s z0GCTests.test_trashcan_threads..C.__del__N)rrrrŽrr rkrr’rrr{s rcs(ˆgƒ}tˆƒD]}ˆ|gƒg}q~dSr)r„)ryr)rÚNESTINGrrÚ make_nesteds z2GCTests.test_trashcan_threads..make_nestedcsˆs ˆƒqdSrrr)Úexitr”rrÚ run_thread•sz1GCTests.test_trashcan_threads..run_threadgñh㈵øä>)Útargetcs ˆ d¡Sr0©r3r)r•rrÚ¢rOz/GCTests.test_trashcan_threads..çð?)rKr]ÚgetswitchintervalÚsetswitchintervalr„Ú threadingÚThreadr3rr‹rŒr4r5r6rdrŽr)rZ N_THREADSr–Zold_switchintervalÚthreadsrr>r)rr“r•r”rrÚtest_trashcan_threadsos&    *zGCTests.test_trashcan_threadscCsbGdd„dƒ}|ƒ}|ƒ}||_||_t ¡ttjƒ}~~| t ¡d¡| ttjƒ|¡dS)Nc@seZdZdd„ZdS)zGCTests.test_boom..BoomcSs |`t‚dSr©ÚattrÚAttributeError©rZ someattributerrrÚ __getattr__«sz+GCTests.test_boom..Boom.__getattr__N©rrrr¥rrrrÚBoomªsr§é©r¢r4r5rdrTr6)rr§rCrSÚ garbagelenrrrÚ test_boom©s zGCTests.test_boomcCsbGdd„dƒ}|ƒ}|ƒ}||_||_t ¡ttjƒ}~~| t ¡d¡| ttjƒ|¡dS)Nc@seZdZdd„Zdd„ZdS)z!GCTests.test_boom2..Boom2cSs d|_dS©Nr©ryr%rrrr Ãsz*GCTests.test_boom2..Boom2.__init__cSs$|jd7_|jdkr|`t‚dSr0©ryr¢r£r¤rrrr¥Æs z-GCTests.test_boom2..Boom2.__getattr__N©rrrr r¥rrrrÚBoom2Âsr°r¨r©)rr°rCrSrªrrrÚ test_boom2Ás  zGCTests.test_boom2cCsdGdd„dtƒ}|ƒ}|ƒ}||_||_t ¡ttjƒ}~~| t ¡d¡| ttjƒ|¡dS)Nc@seZdZdd„ZdS)z'GCTests.test_boom_new..Boom_NewcSs |`t‚dSrr¡r¤rrrr¥ász3GCTests.test_boom_new..Boom_New.__getattr__Nr¦rrrrÚBoom_Newàsr²r¨©rr¢r4r5rdrTr6)rr²rCrSrª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..Boom2_NewcSs d|_dSr¬r­r%rrrr òsz2GCTests.test_boom2_new..Boom2_New.__init__cSs$|jd7_|jdkr|`t‚dSr0r®r¤rrrr¥õs z5GCTests.test_boom2_new..Boom2_New.__getattr__Nr¯rrrrÚ Boom2_Newñsrµr¨r³)rrµrCrSrªrrrÚtest_boom2_newðs  zGCTests.test_boom2_newcCsÐgd¢}t |¡}| ¡| ||¡t|ƒ}t |¡}| ¡| ||¡dddœ}gd¢}t |¡}| ¡| ||¡t ddgddid ¡}| ¡| |d d gttd ƒƒ¡| t dd d ¡g¡dS)N)r1érur·é)r1ru)r1r·rur¸r1r=r¨)rrrrrurCy@)r4Z get_referentsÚsortr6ÚtuplerKr„)rrZgotZatupleZadictZexpectedrrrÚ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 „d tƒ}Gd d „d ƒ}Gdd„dtƒ}Gdd„dtƒ}| t t¡¡| t |¡¡| t |ƒ¡¡| t |ƒ¡¡| t g¡¡| t t ƒ¡¡| t |ƒ¡¡| t |ƒ¡¡| t |ƒ¡¡dS)Nr1ršyð?@TFóarCc@s eZdZdS)z*GCTests.test_is_tracked..UserClassNr@rrrrÚ UserClass0sr½c@s eZdZdS)z(GCTests.test_is_tracked..UserIntNr@rrrrÚUserInt3sr¾c@seZdZdZdS)z/GCTests.test_is_tracked..UserClassSlotsrN©rrrÚ __slots__rrrrÚUserClassSlots7srÁc@seZdZdZdS)z/GCTests.test_is_tracked..UserFloatSlotsrNr¿rrrrÚUserFloatSlots;srÂc@seZdZdZdS)z-GCTests.test_is_tracked..UserIntSlotsrNr¿rrrrÚ UserIntSlots?srÃ) Ú assertFalser4Z is_trackedÚ bytearrayÚtypeÚintrÚfloatÚ assertTrueÚset)rr½r¾rÁrÂrÃrrrÚtest_is_trackeds6zGCTests.test_is_trackedcsb| t d¡¡g‰G‡fdd„dƒ}|ƒ}| t |¡¡~t ¡ˆ ¡}| t |¡¡dS)Nr·cseZdZ‡fdd„ZdS)z*GCTests.test_is_finalized..Lazaruscsˆ |¡dSrr˜r%©ZstoragerrrkRsz2GCTests.test_is_finalized..Lazarus.__del__NrlrrÌrrÚLazarusQsrÍ)rÄr4Z is_finalizedr5rerÉ)rrÍZlazarusrrÌrÚtest_is_finalizedLszGCTests.test_is_finalizedcsˆ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Ú crOz>GCTests.test_bug1055820b..callback..rr$)ÚWRsÚouchrrÚcallbackbsz*GCTests.test_bug1055820b..callbackcSsg|] }t|ƒ‘qSr)r©rÏrrrrrÐerOz,GCTests.test_bug1055820b..r=csg|]}t |ˆ¡‘qSr)r(r))rÏrx)rÓrrrÐfrOr)r„r4r5r6rd)rZCsrxryr)rÑrÓrÒrÚtest_bug1055820b^szGCTests.test_bug1055820bcsDt ¡Gdd„dƒ‰Gdd„dƒ‰‡‡fdd„}|ƒt ¡dS)Nc@s eZdZdS)z GCTests.test_bug21435..ANr@rrrrrA‚srAc@seZdZdd„Zdd„ZdS)z GCTests.test_bug21435..BcSs ||_dSrr­)rryrrrr †sz)GCTests.test_bug21435..B.__init__cSs d|_dSr©r¢r%rrrrk‰sz(GCTests.test_bug21435..B.__del__N)rrrr rkrrrrrJ…srJcs ˆƒ}ˆˆƒƒ}||_||_dSrrÖ)rCrS©rArJrrÚdo_workŒs z&GCTests.test_bug21435..do_work)r4r5)rrØrr×rÚ test_bug21435vs zGCTests.test_bug21435csŠddl‰d}‡‡fdd„}||dƒ}ˆ d|¡ˆ d|¡||dƒ}ˆ d |¡ˆ d |vphd |v|¡||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 "" %% 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|gˆjˆjd}| ¡\}}|j ¡|j ¡ˆ |j d¡ˆ |d¡|S)Nz-Wdú-c©ÚstdoutÚstderrrrO) ÚPopenr]Ú executableÚPIPEÚ communicaterÜÚcloserÝr6Ú returncode)ÚcodeÚprÜrÝ©rÚ subprocessrrÚ run_command«sþ    z5GCTests.test_garbage_at_shutdown..run_commandÚ0s=ResourceWarning: gc: 2 uncollectable objects at shutdown; uses zgc.DEBUG_UNCOLLECTABLEs8ResourceWarning: gc: 2 uncollectable objects at shutdowns[, ]s[, ]zgc.DEBUG_SAVEALLs!uncollectable objects at shutdown)rçZassertInZ assertNotInrÉ)rrärèrÝrrærÚtest_garbage_at_shutdown–s$ ÿ  ÿþ 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 r6Ústrip)rräÚrcÚoutÚerrrrrÚtest_gc_main_module_at_shutdownÇsz'GCTests.test_gc_main_module_at_shutdowncCsdtƒJ}d}d|f}t|d|ƒtd|ƒ\}}}| | ¡d¡Wdƒn1sV0YdS)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ë)rr r r6rì)rZ script_dirÚmodulerärírîrïrrrÚ#test_gc_ordinary_module_at_shutdownÔsü z+GCTests.test_gc_ordinary_module_at_shutdowncCsfd}| tt¡ttdƒ}| |¡Wdƒn1s:0Yttƒ\}}}| | ¡d¡dS)NzÊif 1: class ClassWithDel: def __del__(self): print('__del__ called') a = ClassWithDel() a.link = a raise SystemExit(0)Úwrë)Ú addCleanupr rÚopenÚwriter r6rì)rräZscriptrírîrïrrrÚtest_global_del_SystemExitçs   (z"GCTests.test_global_del_SystemExitcCsrt ¡}| t|ƒd¡|D]T}| |t¡| t|ƒhd£¡| |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·>Ú collectionsÚ uncollectableÚ collectedrúrrørùr1r=) r4Ú get_statsr6rdÚassertIsInstanceÚdictrÊZassertGreaterEqualÚ isenabledrôrnrpr5)rZstatsÚstÚoldÚnewrrrÚtest_get_statsõs0  ÿ     zGCTests.test_get_statscCs4t ¡| t ¡d¡t ¡| t ¡d¡dSr¬)r4ZfreezerwZget_freeze_countZunfreezer6r%rrrÚ test_freezeszGCTests.test_freezecsøt ¡g‰ˆ ˆ¡| t‡fdd„tjddDƒƒ¡| t‡fdd„tjddDƒƒ¡| t‡fdd„tjddDƒƒ¡tjdd| t‡fd d„tjddDƒƒ¡| t‡fd d„tjddDƒƒ¡| t‡fd d„tjddDƒƒ¡tjdd| t‡fd d„tjddDƒƒ¡| t‡fd d„tjddDƒƒ¡| t‡fdd„tjddDƒƒ¡tjdd| t‡fdd„tjddDƒƒ¡| t‡fdd„tjddDƒƒ¡| t‡fdd„tjddDƒƒ¡Št ¡dS)Nc3s|]}ˆ|uVqdSrr©rÏÚelement©r7rrÚ rOz+GCTests.test_get_objects..r©Ú generationc3s|]}ˆ|uVqdSrrrrrrrrOr1c3s|]}ˆ|uVqdSrrrrrrr rOr=c3s|]}ˆ|uVqdSrrrrrrr$rOc3s|]}ˆ|uVqdSrrrrrrr'rOc3s|]}ˆ|uVqdSrrrrrrr*rOc3s|]}ˆ|uVqdSrrrrrrr.rOc3s|]}ˆ|uVqdSrrrrrrr1rOc3s|]}ˆ|uVqdSrrrrrrr4rOc3s|]}ˆ|uVqdSrrrrrrr8rOc3s|]}ˆ|uVqdSrrrrrrr;rOc3s|]}ˆ|uVqdSrrrrrrr>rO)r4r5r3rÉÚanyÚ get_objectsrÄr%rrrÚtest_get_objectssX ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿzGCTests.test_get_objectscCslt ¡| tt ¡ƒttjddƒ¡| ttjd¡| ttjd¡| ttjd¡| ttjd¡dS)NrièiüÿÿÚ1gX9´Èv¾ó?)r4r5r6rdr Z assertRaisesÚ ValueErrorrr%rrrÚtest_get_objects_argumentsCsÿz"GCTests.test_get_objects_argumentscsªGdd„dƒ}G‡fdd„d|ƒ‰t ¡t ¡ˆƒ}| ˆjd¡~t ¡| ˆjd¡| tˆjƒd¡ˆj ¡| ˆjd¡t ¡| ˆjd¡t ¡dS)Nc@seZdZdd„ZdS)zAGCTests.test_resurrection_only_happens_once_per_object..AcSs ||_dSr©Úmer%rrrr OszJGCTests.test_resurrection_only_happens_once_per_object..A.__init__Nr!rrrrrANsrAcs eZdZdZgZ‡fdd„ZdS)zGGCTests.test_resurrection_only_happens_once_per_object..Lazarusrcsˆjd7_ˆj |¡dSr0)Ú resurrectedÚresurrected_instancesr3r%©rÍrrrkVszOGCTests.test_resurrection_only_happens_once_per_object..Lazarus.__del__N)rrrrrrkrrrrrÍRsrÍrr1) r4r5rpr6rrdrÚclearrn)rrAÚlazrrrÚ.test_resurrection_only_happens_once_per_objectMs z6GCTests.test_resurrection_only_happens_once_per_objectcs®Gdd„dƒ}G‡fdd„dƒ‰t ¡t ¡ˆƒ}|ƒ}t|ƒ}||_||_~~t ¡| tˆjƒd¡ˆj  ¡}|  t |dƒ¡| t|jƒ|¡t ¡t  ¡dS)Nc@seZdZdd„ZdS)z6GCTests.test_resurrection_is_transitive..CargocSs ||_dSrrr%rrrr ssz?GCTests.test_resurrection_is_transitive..Cargo.__init__Nr!rrrrÚCargorsrcseZdZgZ‡fdd„ZdS)z8GCTests.test_resurrection_is_transitive..Lazaruscsˆj |¡dSr)rr3r%rrrrkysz@GCTests.test_resurrection_is_transitive..Lazarus.__del__N)rrrrrkrrrrrÍvsrÍr1Úcargo) r4r5rprRrrr6rdrrerÉÚhasattrrn)rrrrZcargo_idÚinstancerrrÚtest_resurrection_is_transitiveqs" z'GCTests.test_resurrection_is_transitivec s¼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)zLGCTests.test_resurrection_does_not_block_cleanup_of_other_objects..AcSs ||_dSrrr%rrrr ›szUGCTests.test_resurrection_does_not_block_cleanup_of_other_objects..A.__init__Nr!rrrrrAšsrAcseZdZ‡fdd„ZdS)zLGCTests.test_resurrection_does_not_block_cleanup_of_other_objects..Zcsˆ |¡dSrr˜r%©ZzsrrrkŸszTGCTests.test_resurrection_does_not_block_cleanup_of_other_objects..Z.__del__NrlrrrrÚZžsrcSst ¡d}|d|dfS)Néÿÿÿÿrúrù)r4rû)r;rrrÚgetstats¤s zSGCTests.test_resurrection_does_not_block_cleanup_of_other_objects..getstatsr=rr¨)r4r5rpr„r6rrn) rr…rArr!ZoldcZoldncrr>rxZncrrrÚ9test_resurrection_does_not_block_cleanup_of_other_objects“sN             zAGCTests.test_resurrection_does_not_block_cleanup_of_other_objectsNz%requires ContainerNoGC extension typecCs’tj ¡}Gdd„dƒ}Gdd„dƒ}|ƒ}||_t|ƒƒ|_t |jj|¡|_ |j g}|  |¡t   ¡t   ¡~~t   ¡| ¡t  ¡dS)Nc@seZdZgd¢ZdS)z+GCTests.test_trash_weakref_clear..A)rCÚyÚwzNr¿rrrrrAøsrAc@s eZdZdS)z+GCTests.test_trash_weakref_clear..ZNr@rrrrrûsr)ÚunittestZmockZMockrCrr#r(r)Úvaluer$r3r4r5rpZassert_not_calledrn)rrÓrArrCZwr_cyclerrrÚtest_trash_weakref_clearÖs   z GCTests.test_trash_weakref_clear)0rrrr8r<r?rFrGrIrLrNrrYrZr\rrarhrrrsr{r~r‰r r«r±r´r¶r»rËrÎrÕrÙrêrðròr÷rrr rrrr"r%ÚskipIfrr'rrrrr/Usb         #:/  0 . $"C ÿr/c@sdeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z e dd„ƒZ e   ed¡dd„ƒZdS)ÚGCCallbackTestscCsLt ¡|_t ¡t ¡|_t d¡tj |j ¡tj |j ¡g|_ dSr¬) r4rþÚenabledrprbrgrcÚ callbacksr3Úcb1Úcb2Ú othergarbager%rrrÚsetUps   zGCCallbackTests.setUpcCsz|`tj |j¡tj |j¡t |j¡|jr:t  ¡t  ¡tj D]}t |t ƒrHd|_qHtj dd…=|`t  ¡dSr)Úvisitr4r+rVr,r-rcrgr*rnr5rTÚ isinstancer+r,r.)rrXrrrÚtearDowns    zGCCallbackTests.tearDowncCsBg|_t ¡tjdd…g}tjdd…<|j |¡g|_dSr)r0r4r5rTr.r3)rrTrrrÚpreclean.s  zGCCallbackTests.precleancCs|j d|t|ƒf¡dSr0)r0r3rý)rÚphaseÚinforrrr,8szGCCallbackTests.cb1cCsf|j d|t|ƒf¡|dkrbt|dƒrbdd„tjDƒ}dd„tjDƒtjdd…<|D] }d|_qVdS)Nr=ÚstopÚcleanupcSsg|]}t|tƒr|‘qSr©r1r+©rÏrzrrrrÐ?rOz'GCCallbackTests.cb2..cSsg|]}t|tƒs|‘qSrr8r9rrrrÐ@s ÿ)r0r3rýrr4rTr,)rr4r5Zucrzrrrr-;s zGCCallbackTests.cb2cCsò| ¡t ¡dd„|jDƒ}dd„|Dƒ}dd„|Dƒ}| |dgd¡| |dgd¡dd„|jDƒ}dd„|Dƒ}d d„|Dƒ}| |d gd¡| |d gd¡|jD]6}|d}| d |v¡| d |v¡| d|v¡q¶dS)NcSsg|] }|d‘qS)rr©rÏrˆrrrrÐLrOz0GCCallbackTests.test_collect..cSsg|]}|dkr|‘qS©r1rrÔrrrrÐMrOcSsg|]}|dkr|‘qS)r=rrÔrrrrÐNrOr1r=cSsg|] }|d‘qSr;rr:rrrrÐSrOcSsg|]}|dkr|‘qS)ÚstartrrÔrrrrÐTrOcSsg|]}|dkr|‘qS)r6rrÔrrrrÐUrOr<r6r rúrù)r3r4r5r0r6rÉ)rr€Zn1Zn2rˆr5rrrÚ test_collectEs" zGCCallbackTests.test_collectcCs:| ¡t d¡|jD]}|d}| |dd¡qdS)Nr=r )r3r4r5r0r6)rrˆr5rrrÚtest_collect_generation`s   z'GCCallbackTests.test_collect_generationcCs | ¡tƒtƒtdƒt ¡|jD]:}|ddkr 0" failed.srefcount is too smalls [0-9a-fA-Fx]+sobject address : sobject refcount : 1sobject type : sobject type name: listsobject repr : \[1, 2, 3\])r3r rçÚtextwrapÚdedentrÞr]rßràrárÜrârÝZ assertRegex)rrçrärårÜrÝZ address_regexrrrÚtest_refcount_errorsŒsB þ   ÿÿÿÿÿÿÿz$GCCallbackTests.test_refcount_errorsN)rrrr/r2r3r,r-r=r>rr@r%r(ÚBUILD_WITH_NDEBUGrCrrrrr)s    $ÿr)c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚGCTogglingTestscCs t ¡dSr)r4rnr%rrrr/ÄszGCTogglingTests.setUpcCs t ¡dSr)r4rpr%rrrr2ÇszGCTogglingTests.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)Nrr1r=csˆƒgˆdd…<dSrrr$©Zc2wrrÒrrrÓÚsz2GCTogglingTests.test_bug1055820c..callbacké'ú'gc didn't happen after 10000 iterations) rr4r5Z keep_c0_aliverr(r)r"r#rUr6rdr3) rZc0Úc1Úc2rÓZc0wrÚjunkrÚdetectorryrrFrÚtest_bug1055820cÊs.     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..Dcsˆƒgˆdd…<dSrrr%rFrrrksz3GCTogglingTests.test_bug1055820d..D.__del__NrlrrFrrÚDsrNrr1r=rGrH) rr4r5Z keep_d0_aliverr(r)r"r#rUr6rdr3) rrNZd0rIrJrLrKrryrrFrÚtest_bug1055820ds,    z GCTogglingTests.test_bug1055820dN)rrrr/r2rMrOrrrrrEÃsFrEc Csžt ¡}t ¡t ¡}t |tj@¡zBt ¡ttt t ƒWt |¡t rXt dƒt  ¡|sšt ¡n,t |¡t r„t dƒt  ¡|s˜t ¡0dS)Nzrestoring automatic collection)r4rþrprbrcZ DEBUG_LEAKr5rr/rEr)rÚprintrn)r*rgrrrÚ test_mainSs&  ø rQÚ__main__)(r%Z unittest.mockZ test.supportrrrrrrrr r Ztest.support.script_helperr r r4r]Z sysconfigrArr‹r(Z _testcapir Ú ImportErrorrrrr"r+Zget_config_varsÚgetrDrZTestCaser/r)rErQrrrrrÚsP,    D2