a ze:@s:ddlZddlZddlZddlZzddlmZWneyJddZYn0zddlmZWneyvddZYn0ddlm Z Gd d d Z Gd d d e Z eGd dde Z eGddde Z Gddde ZGddde ZGdddZGdddeejZGdddZGdddeeZGdddeeZGdd d eeZGd!d"d"eejZGd#d$d$ZGd%d&d&eeZGd'd(d(eeZGd)d*d*eeZGd+d,d,eejZGd-d.d.e ZeGd/d0d0eZeGd1d2d2eZeGd3d4d4eeZ e j!Gd5d6d6eejZ"e#d7kr6e$dS)8N) with_tp_delcCsGdddt}|S)Nc@seZdZddZdS)zwith_tp_del..Cc_s tddS)Nzrequires _testcapi.with_tp_del TypeErrorclsargskwargsr J/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_finalization.py__new__szwith_tp_del..C.__new__N__name__ __module__ __qualname__r r r r r Csr)objectrrr r r r sr) without_gccCsGddd}|S)Nc@seZdZddZdS)zwithout_gc..Cc_s tddS)Nzrequires _testcapi.without_gcrrr r r r szwithout_gc..C.__new__Nr r r r r rsrr rr r r rsr)supportc@sZeZdZgZgZgZgZdZdZe ddZ e e j ddZ ddZd d Zd d Zd S)NonGCSimpleBaseFr cCs>|j|jtjt|j|jdSN) survivorsclearerrorsgcgarbagecollect del_calls tp_del_callsrr r r _cleanup.s     zNonGCSimpleBase._cleanupc cstd|j|jdt_z(dV|jr<|jdWdt_|ndt_|0Wdn1sr0YdS)NFrT) rZ disable_gcrrrr _cleaningrr rr r r test7s     zNonGCSimpleBase.testcCsdSrr selfr r r check_sanityIszNonGCSimpleBase.check_sanityc Cs`z*|js(|jt|||Wn0tyZ}z|j|WYd}~n d}~00dSr)r!rappendidr% side_effect Exceptionrr$er r r __del__Ns zNonGCSimpleBase.__del__cCsdSrr r#r r r r([szNonGCSimpleBase.side_effectN)r rrrrrrr! __slots__ classmethodr contextlibcontextmanagerr"r%r,r(r r r r rs   rc@seZdZddZddZdS) SimpleBasecCst||_dSr)r'Zid_r#r r r __init__cszSimpleBase.__init__cCsdSrr r#r r r r%fszSimpleBase.check_sanityN)r rrr2r%r r r r r1asr1c@seZdZdZdS)NonGCr N)r rrr-r r r r r3jsr3c@seZdZdZddZdS)NonGCResurrectorr cCs|j|dSrrr&r#r r r r(rszNonGCResurrector.side_effectN)r rrr-r(r r r r r4nsr4c@s eZdZdS)SimpleNr rrr r r r r6xsr6c@seZdZddZdS)SimpleResurrectorcCs|j|dSrr5r#r r r r(~szSimpleResurrector.side_effectNr rrr(r r r r r8|sr8c@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)TestBasecCs"tjdd|_gtjdd<dSr)rr old_garbager#r r r setUpszTestBase.setUpcCs2z|tjgW|`tn|`t0dSr) assertEqualrrr;rr#r r r tearDowns  zTestBase.tearDowncCs|ttjt|dSr)r=sortedr1rr$idsr r r assert_del_callsszTestBase.assert_del_callscCs|ttjt|dSr)r=r?r1rr@r r r assert_tp_del_callsszTestBase.assert_tp_del_callscCs$|tddtjDt|dS)Ncss|]}t|VqdSrr'.0xr r r z,TestBase.assert_survivors..)r=r?r1rr@r r r assert_survivorsszTestBase.assert_survivorscCs$|tddtjDt|dS)Ncss|]}t|VqdSrrDrEr r r rHrIz*TestBase.assert_garbage..)r=r?rrr@r r r assert_garbageszTestBase.assert_garbagecCstjdSr)r1rrr#r r r clear_survivorsszTestBase.clear_survivorsN) r rrr<r>rBrCrJrKrLr r r r r:sr:c@s8eZdZddZddZejddZejddZd S) SimpleFinalizationTestcCstrt}t|g}t|}~t||| g| |dt||| gWdn1s0YdSr) r1r"r6r'weakrefrefrrrBrJassertIsr$srAwrr r r test_simples      z"SimpleFinalizationTest.test_simplecCstzt}t|g}t|}~t||| || |d| t||| gWdn1s0Y| |ddSr) r1r"r8r'rNrOrrrBrJ assertIsNotrLrPrQr r r test_simple_resurrects      (z,SimpleFinalizationTest.test_simple_resurrectcCstjt}|t|t|g}~t||| gt||| gWdn1sx0YdSr) r1r"r3 assertFalser is_trackedr'rrBrJr$rRrAr r r test_non_gcs     z"SimpleFinalizationTest.test_non_gccCstvt}|t|t|g}~t||| || t||d| |Wdn1s0YdSN) r1r"r4rWrrXr'rrBrJrLrYr r r test_non_gc_resurrects    z,SimpleFinalizationTest.test_non_gc_resurrectN) r rrrTrVr cpython_onlyrZr]r r r r rMs  rMcs(eZdZfddZfddZZS) SelfCycleBasecst||_dSr)superr2rOr# __class__r r r2s zSelfCycleBase.__init__cstdSr)r`r%r#rar r r%s zSelfCycleBase.check_sanity)r rrr2r% __classcell__r r rar r_s r_c@s eZdZdS)SimpleSelfCycleNr7r r r r rdsrdc@s eZdZdS)SelfCycleResurrectorNr7r r r r resrec@seZdZddZdS)SuicidalSelfCyclecCs d|_dSr)rOr#r r r r(szSuicidalSelfCycle.side_effectNr9r r r r rfsrfc@s$eZdZddZddZddZdS)SelfCycleFinalizationTestcCstrt}t|g}t|}~t||| g| |dt||| gWdn1s0YdSr) r1r"rdr'rNrOrrrBrJrPrQr r r rTs      z%SelfCycleFinalizationTest.test_simplecCstt}t|g}t|}~t||| || |d| t||| g| |dWdn1s0YdSr) r1r"rer'rNrOrrrBrJrPrLrQr r r rVs       z/SelfCycleFinalizationTest.test_simple_resurrectcCstt}t|g}t|}~t||| g| |dt||| g| |dWdn1s0YdSr) r1r"rfr'rNrOrrrBrJrPrQr r r test_simple_suicide%s       z-SelfCycleFinalizationTest.test_simple_suicideN)r rrrTrVrhr r r r rgsrgcs$eZdZddZfddZZS) ChainedBasecCsd|_||_||_dS)NFsuicidedleftright)r$rlr r r chain9szChainedBase.chaincs2t|jrn|j}|jr n|j}|jr.ndSr)r`r%rkrlrm)r$rlrmrar r r%>s zChainedBase.check_sanity)r rrrnr%rcr r rar ri7sric@s eZdZdS) SimpleChainedNr7r r r r roOsroc@s eZdZdS)ChainedResurrectorNr7r r r r rpRsrpc@seZdZddZdS)SuicidalChainedcCsd|_d|_d|_dS)NTrjr#r r r r(WszSuicidalChained.side_effectNr9r r r r rqUsrqc@sdeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ dS)CycleChainFinalizationTestcCs:dd|D}tt|D]}||||dq|S)NcSsg|] }|qSr r )rFrr r r hrIz:CycleChainFinalizationTest.build_chain..)rangelenrn)r$classesnodesir r r build_chaingsz&CycleChainFinalizationTest.build_chaincCst|}t||}dd|D}dd|D}~t|||g|dd|Ddg|t||Wdn1s0YdS)NcSsg|] }t|qSr rDrFrRr r r rsqrIzKCycleChainFinalizationTest.check_non_resurrecting_chain..cSsg|]}t|qSr rNrOr{r r r rsrrIcSsg|] }|qSr r rFrSr r r rswrI) rvr1r"rzrrrBrJr=)r$rwNrxrAwrsr r r check_non_resurrecting_chainms    z7CycleChainFinalizationTest.check_non_resurrecting_chaincCst|}t||}t|}dd|D}dd|D}dd|D}~t|||||dd|Ddg|| t|||gWdn1s0YdS)NcSsg|] }t|qSr rDr{r r r rsrIzGCycleChainFinalizationTest.check_resurrecting_chain..cSsg|]}t|trt|qSr ) isinstancer8r'r{r r r rsrIcSsg|]}t|qSr r|r{r r r rsrIcSsg|] }|qSr r r}r r r rsrI) rvr1r"rzrrrBrJr=rL)r$rwr~rxrAZ survivor_idsrr r r check_resurrecting_chain{s      z3CycleChainFinalizationTest.check_resurrecting_chaincCs|tgddSN)rror#r r r test_homogenoussz*CycleChainFinalizationTest.test_homogenouscCs|tgddSr)rrpr#r r r test_homogenous_resurrectsz4CycleChainFinalizationTest.test_homogenous_resurrectcCs|tgddSr)rrqr#r r r test_homogenous_suicidalsz3CycleChainFinalizationTest.test_homogenous_suicidalcCs|ttgddSr[rrqror#r r r test_heterogenous_suicidal_onesz9CycleChainFinalizationTest.test_heterogenous_suicidal_onecCs|tgdtgddSr[rr#r r r test_heterogenous_suicidal_twosz9CycleChainFinalizationTest.test_heterogenous_suicidal_twocCs|ttgddSr[)rrpror#r r r test_heterogenous_resurrect_onesz:CycleChainFinalizationTest.test_heterogenous_resurrect_onecCs|tttgddSr[rrprorqr#r r r test_heterogenous_resurrect_twos z:CycleChainFinalizationTest.test_heterogenous_resurrect_twocCs(|tgdtgdtgddSr[rr#r r r !test_heterogenous_resurrect_threeszr#rar r r>s zLegacyFinalizationTest.tearDowncCst|t}t|g}t|}~t||| || g| |dt||| |Wdn1s0YdSr) r1r"rr'rNrOrrrBrCrJrPrQr r r test_legacys       z"LegacyFinalizationTest.test_legacycCstt}t|g}t|}~t||| || || |d| t||| |d| |Wdn1s0Y| |ddSr[) r1r"rr'rNrOrrrBrCrJrPrLrQr r r test_legacy_resurrects        (z,LegacyFinalizationTest.test_legacy_resurrectcCstvt}t|g}t|}~t|g| g| g| || |ddtj d_Wdn1s0Y| g||ddS)Nr)r1r"rr'rNrOrrrBrCrJrKrUrrPrQr r r test_legacy_self_cycles       * z-LegacyFinalizationTest.test_legacy_self_cycle)r rrr>rrrrcr r rar rs r__main__)%r/rZunittestrNZ _testcapir ImportErrorrr"rrr1r3r4r6r8r:ZTestCaserMr_rdrerfrgrirorprqrrrrrrr^rr mainr r r r sV   B   A  : MA