a ze;)@sddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl m Z ddl mZmZddl mZdadZGdddZGdd d Zd d Zd d ZGdddZGdddZGdddejZejd+ddZGdddeZGdddeZGdddejZGdddeZ ddl m!Z!Gd d!d!e!j"Z#Gd"d#d#e!j"Z$Gd$d%d%ejZ%d&Z&d'e&iZ'd(d)Z(e)d*kre(dS),N)support) script_helper ALWAYS_EQ) gc_collectZfoobarc@seZdZddZdS)CcCsdSNselfrrE/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_weakref.pymethodszC.methodN)__name__ __module__ __qualname__r rrrr rsrc@seZdZdZddZdS)CallableNcCs ||_dSrbar)r xrrr __call__ szCallable.__call__)r rrrrrrrr rsrcCs dd}|S)NcSsdSrrrrrr f%zcreate_function..frrrrr create_function$srcCstjSr)rr rrrr create_bound_method(src@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)ObjectcCs ||_dSrarg)r rrrr __init__-szObject.__init__cCs d|jS)Nz rr rrr __repr__/szObject.__repr__cCst|tr|j|jkStSr isinstancerrNotImplementedr otherrrr __eq__1s  z Object.__eq__cCst|tr|j|jkStSrrr"rrr __lt__5s  z Object.__lt__cCs t|jSr)hashrr rrr __hash__9szObject.__hash__cCsdS)Nrr rrr some_method;szObject.some_methodcCsdS)Nrr rrr other_method=szObject.other_methodN) r rrrrr$r%r'r)r+rrrr r,src@seZdZddZdS)RefCyclecCs ||_dSr)cycler rrr rBszRefCycle.__init__Nr rrrrrrr r,Asr,c@seZdZddZddZdS)TestBasecCs d|_dSNrcbcalledr rrr setUpHszTestBase.setUpcCs|jd7_dSNr1)r refrrr callbackKszTestBase.callbackN)r rrr3r7rrrr r/Fsr/-C6?c #sxdfdd}tJtj|d}|zdVWd|nd|0Wdn1sj0YdS)zR Ensure GC collections happen in a different thread, at a high frequency. FcssttqdSr)timesleepgccollectrperiodZ please_stoprr r<Vs z"collect_in_thread..collect)targetNT)rZ disable_gc threadingThreadstartjoin)r>r<trr=r collect_in_threadOs   rEc@seZdZddZddZejddZddZd d Z d d Z d dZ ddZ ddZ ddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Z d9d:Z!d;d<Z"d=d>Z#d?d@Z$dAdBZ%dCdDZ&dEdFZ'dGdHZ(dIdJZ)dKdLZ*dMdNZ+dOdPZ,dQdRZ-dSdTZ.dUdVZ/dWdXZ0dYdZZ1d[d\Z2d]d^Z3d_d`Z4dadbZ5dcddZ6dedfZ7dgdhZ8didjZ9dkS)lReferencesTestCasecCsD|t|t|tt}t|}t|~t|dSr)check_basic_refrrrweakrefr6repr)r owrrrr test_basic_refgs    z!ReferencesTestCase.test_basic_refcCs"|t|t|tdSr)check_basic_callbackrrrr rrr test_basic_callbackus  z&ReferencesTestCase.test_basic_callbackcCsRddl}|j}|}t|}|||~||||||dSr0) _testcapicreate_cfunctionrHr6assertIs assertIsNonerGrM)r rOrPrrKrrr test_cfunctionzs   z!ReferencesTestCase.test_cfunctioncCsZt}t||j}t||j}~t||d||d||jdddS)Nz$expected reference to be invalidatedz-callback not called the right number of times)rrHr6r7rrR assertEqualr2r rJref1ref2rrr test_multiple_callbackss z*ReferencesTestCase.test_multiple_callbackscCs2|fdd}t}t|||_t||}~dS)NcSs |dSrr6)objectr rrr r7szDReferencesTestCase.test_multiple_selfref_callbacks..callback)rrHr6)r r7crWrrr test_multiple_selfref_callbackss  z2ReferencesTestCase.test_multiple_selfref_callbackscCst}|jttj|dddS)N)r7)r assertRaises TypeErrorrHr6)r r\rrr test_constructor_kwargssz*ReferencesTestCase.test_constructor_kwargscCst}d|_t||j}t||j}~tdd}|t|||t||tt}t|tt|| |j ddS)Nr5cSs |jdSrr)proxyrrr checksz0ReferencesTestCase.test_proxy_ref..checkrT) rrrHrar7rr^ReferenceErrorboolrUr2)r rJrWrXrbZref3rrr test_proxy_refs z!ReferencesTestCase.test_proxy_refcCs6|}t|}||d|}|||ddS)Nz,weak reference to live object should be livez-() should return original object if live)rHr6assertIsNotNonerQ)r factoryrJr6o2rrr rGs z"ReferencesTestCase.check_basic_refcCsDd|_|}t||j}~t||jdd||ddS)Nrr5z(callback did not properly set 'cbcalled'z3ref2 should be dead after deleting object reference)r2rHr6r7rrUrR)r rgrJr6rrr rMs z'ReferencesTestCase.check_basic_callbackcCst}t|}t|}t|}|||dt}t|}t|}t|}|||d|t|dd~t|t|dddS)Nz1reference object w/out callback should be re-usedrTzwrong weak ref count for objectr5z4wrong weak ref count for object after deleting proxy)rrHr6rarQrUgetweakrefcountr)r rJrWrarXrrr test_ref_reuses,      z!ReferencesTestCase.test_ref_reusecCs6t}t|}t|}t|}|||ddS)Nz4proxy object w/out callback should have been re-used)rrHrar6rQ)r rJproxy1r6proxy2rrr test_proxy_reuses   z#ReferencesTestCase.test_proxy_reusecCsnt}||t|t}t|}||d|d|t |d| |dddg|dd<|t |d|t |d| d|dd|d<||dd||ddt|}t|}|||tt d }t|}||dd|dd||dd|dd||dd|dd||dd|dddS) Nz(proxy for empty UserList should be false r5z+proxy for non-empty UserList should be truerTz,proxy didn't support __contains__() properlyr* ) r check_proxyrHra collectionsUserList assertFalseappendrUlen assertTrueassertInrange)r rJLpZL2p2ZL3Zp3rrr test_basic_proxys0        z#ReferencesTestCase.test_basic_proxycCsFGdddt}|}|dtt||tt|ddS)Nc@seZdZddZddZdS)z0ReferencesTestCase.test_proxy_unicode..CcSsdS)Nstringrr rrr __str__ sz8ReferencesTestCase.test_proxy_unicode..C.__str__cSsdS)Nbytesrr rrr __bytes__ sz:ReferencesTestCase.test_proxy_unicode..C.__bytes__N)r rrrrrrrr r srrr)r[rxdirrHrarUbytes)r rinstancerrr test_proxy_unicodesz%ReferencesTestCase.test_proxy_unicodecCs4Gddd}|}t|}|t|ddS)Nc@seZdZddZdS)z.ReferencesTestCase.test_proxy_index..CcSsdS)Nrprr rrr __index__sz8ReferencesTestCase.test_proxy_index..C.__index__N)r rrrrrrr rsrrp)rHrarUoperatorindexr rrJr{rrr test_proxy_indexs z#ReferencesTestCase.test_proxy_indexcCsFGddd}|}t|}||dd|d}||ddS)Nc@seZdZddZddZdS)z,ReferencesTestCase.test_proxy_div..CcSsdSN*rr"rrr __floordiv__sz9ReferencesTestCase.test_proxy_div..C.__floordiv__cSsdS)Nrr"rrr __ifloordiv__sz:ReferencesTestCase.test_proxy_div..C.__ifloordiv__N)r rrrrrrrr rsrr*rrrHrarUrrrr test_proxy_divs  z!ReferencesTestCase.test_proxy_divcCsVGddd}|}t|}||dd|d|d|d}||ddS)Nc@s$eZdZddZddZddZdS)z/ReferencesTestCase.test_proxy_matmul..CcSsdS)Nrr"rrr __matmul__)sz:ReferencesTestCase.test_proxy_matmul..C.__matmul__cSsdS)N]rr"rrr __rmatmul__+sz;ReferencesTestCase.test_proxy_matmul..C.__rmatmul__cSsdS)N1rr"rrr __imatmul__-sz;ReferencesTestCase.test_proxy_matmul..C.__imatmul__N)r rrrrrrrrr r(srr*rrrrrrrr test_proxy_matmul's z$ReferencesTestCase.test_proxy_matmulcCs|tjdSr)check_shared_without_callbackrHr6r rrr test_shared_ref_without_callback>sz3ReferencesTestCase.test_shared_ref_without_callbackcCs|tjdSr)rrHrar rrr "test_shared_proxy_without_callbackAsz5ReferencesTestCase.test_shared_proxy_without_callbackcCstd}||d}||d}|||d~~||}||d}|||d~~||}||}|||d~~||d}||}|||ddS)Nr5z%both callbacks were None in the C APIz&callbacks were NULL, None in the C APIz%both callbacks were NULL in the C APIz&callbacks were None, NULL in the C API)rrQ)r makerefrJZp1r|rrr rDs     z0ReferencesTestCase.check_shared_without_callbackcCst}t|}||||t|tjd|d||jdd|dd||jdd| t || t |ddddS) Nzproxy is not of callable typez twinkies!z1call through proxy not passed through to originalzSplat.)rr5rTro) rrHrarqrQtypeCallableProxyTyperUrr^r_)r rJrWrrr test_callable_proxyVs       z&ReferencesTestCase.test_callable_proxycCsd|_||jddd|_||jdd|`|t|ddd|_||jddd|_||jdd|`|t|dd dS) Nr5z)proxy does not reflect attribute additionrTz-proxy does not reflect attribute modificationfooz(proxy does not reflect attribute removalz4object does not reflect attribute addition via proxyz8object does not reflect attribute modification via proxyz3object does not reflect attribute removal via proxy)rrUrthasattr)r rJrarrr rqks0      zReferencesTestCase.check_proxycCs6Gddd}|}t|}|d=||jddS)Nc@seZdZdZddZdS)z3ReferencesTestCase.test_proxy_deletion..FooNcSs ||_dSr)result)r accessorrrr __delitem__sz?ReferencesTestCase.test_proxy_deletion..Foo.__delitem__)r rrrrrrrr Foosrr)rHrarUr)r rgrrrr test_proxy_deletions  z&ReferencesTestCase.test_proxy_deletioncCs4Gdddt}|}|tt|t|dS)Nc@s eZdZdS)z0ReferencesTestCase.test_proxy_bool..ListNr rrrrrr Listrr)listrUrdrHra)r rZlystrrr test_proxy_boolsz"ReferencesTestCase.test_proxy_boolcs\dGfddd}|t}|td|vWdn1sN0YdS)NcseZdZfddZdS)z1ReferencesTestCase.test_proxy_iter..MyObjcstSr)r!r objrr __iter__sz:ReferencesTestCase.test_proxy_iter..MyObj.__iter__Nr rrrrrrr MyObjsrZblech)rHrar^r_)r rr{rrr test_proxy_iters   z"ReferencesTestCase.test_proxy_itercsJgdfdd}|Gfddd}|}|t|gddS)N)r(r*c3sEdHdSrrr)arrrr iterator_funcsz9ReferencesTestCase.test_proxy_next..iterator_funccseZdZfddZdS)z:ReferencesTestCase.test_proxy_next..IteratesWeaklycs tSrrHrar itrr rszCReferencesTestCase.test_proxy_next..IteratesWeakly.__iter__Nrrrrr IteratesWeaklysr)rUr)r rrZweak_itr)rrr test_proxy_nexts  z"ReferencesTestCase.test_proxy_nextcs\ddGfddd}|}d}|t|t|Wdn1sN0YdS)NcSsdSr0rrrrr rz8ReferencesTestCase.test_proxy_bad_next..cseZdZfddZdS)z1ReferencesTestCase.test_proxy_bad_next..Acs tSrrr Znot_an_iteratorrr rsz:ReferencesTestCase.test_proxy_bad_next..A.__iter__Nrrrrr Asrz'Weakref proxy referenced a non-iterator)ZassertRaisesRegexr_r)r ramsgrrr test_proxy_bad_nexts z&ReferencesTestCase.test_proxy_bad_nextcCs4Gddd}|}|dtt|ddS)Nc@seZdZddZddZdS)z5ReferencesTestCase.test_proxy_reversed..MyObjcSsdS)Nrorr rrr __len__sz=ReferencesTestCase.test_proxy_reversed..MyObj.__len__cSstdS)Ncba)iterr rrr __reversed__szBReferencesTestCase.test_proxy_reversed..MyObj.__reversed__N)r rrrrrrrr rsrr)rUrCreversedrHrar rrrrr test_proxy_reversedsz&ReferencesTestCase.test_proxy_reversedcCsGddd}|}|ttt|Wdn1sB0YGddd}|}|ttt|Wdn1s0YdS)Nc@seZdZddZdS)1ReferencesTestCase.test_proxy_hash..MyObjcSsdSrrr rrr r'sz:ReferencesTestCase.test_proxy_hash..MyObj.__hash__Nr rrr'rrrr rsrc@seZdZdZdS)rNrrrrr rs)r^r_r&rHrarrrr test_proxy_hashs , z"ReferencesTestCase.test_proxy_hashcCst}t|}t||j}|t|ddt|}t||j}|t|dd~~~~t|t|dd|tddddS)NrTz*got wrong number of weak reference objectsr(rzAweak reference objects not unlinked from referent when discarded.r5z2got wrong number of weak reference objects for int)rrHr6r7rUrirar)r rJrWrXrkrlrrr test_getweakrefcounts&  z'ReferencesTestCase.test_getweakrefcountcCst}t||j}t||j}~t|t||gdt}t||j}t||j}~t|t||gd~t|t|gd|tdgddS)Nzlist of refs does not matchzlist of refs not clearedr5z#list of refs does not match for int)rrHr6r7rrU getweakrefsrVrrr test_getweakrefss0z#ReferencesTestCase.test_getweakrefscCsFGdddt}|d}t|}||dd|d|ddS)Nc@s eZdZdS)z6ReferencesTestCase.test_newstyle_number_ops..FNrrrrr Fsrg@g?g@)floatrHrarU)r rrr{rrr test_newstyle_number_ops s  z+ReferencesTestCase.test_newstyle_number_opscsGdddtifddfdd}z |WnyLYn 0|dz |WnytYn 0|ddS)Nc@s eZdZdS)z?ReferencesTestCase.test_callbacks_protected..BogusErrorNrrrrr BogusErrorsrcs |=dSrrk)datarr removesz;ReferencesTestCase.test_callbacks_protected..removecs dd}dt|<dS)NcSsdS)Nrrrrrr rrzRReferencesTestCase.test_callbacks_protected..encapsulate..)rHr6rrrrrr encapsulatesz@ReferencesTestCase.test_callbacks_protected..encapsulatezexception not properly restored) ExceptionZfail)r rrrr test_callbacks_protecteds      z+ReferencesTestCase.test_callbacks_protectedcsnddlGdddt}|}t|fdd}~~|}||_t|jfdd}|}||_~~dS)Nrc@s eZdZdS)z0ReferencesTestCase.test_sf_bug_840829..CNrrrrr r;srcsSrr<ignorer;rr r?rz7ReferencesTestCase.test_sf_bug_840829..csSrrrrrr rGr)r;r[rHr6ic1)r rr\rKrc2rrr test_sf_bug_840829.s  z%ReferencesTestCase.test_sf_bug_840829cCsVddl}Gdddt}Gdddt}|}||_t||j|_~~~|dS)Nrc@s eZdZdS)z6ReferencesTestCase.test_callback_in_cycle_1..JNrrrrr JYsrc@seZdZddZdS)z7ReferencesTestCase.test_callback_in_cycle_1..IIcSs |jdSrrr rrrr acallback]szAReferencesTestCase.test_callback_in_cycle_1..II.acallbackNr rrrrrrr II\srr;r[rrHr6rrKr<r r;rrIrrr test_callback_in_cycle_1Vsz+ReferencesTestCase.test_callback_in_cycle_1cCsTddl}Gdddt}Gddd}|}||_t||j|_~~~|dS)Nrc@s eZdZdS)z6ReferencesTestCase.test_callback_in_cycle_2..JNrrrrr rsrc@seZdZddZdS)z7ReferencesTestCase.test_callback_in_cycle_2..IIcSs |jdSrrrrrr rszAReferencesTestCase.test_callback_in_cycle_2..II.acallbackNrrrrr rsrrrrrr test_callback_in_cycle_2~sz+ReferencesTestCase.test_callback_in_cycle_2cCsPddl}Gddd}||}}||_||_t||j|_~~|dS)Nrc@seZdZddZdS)z6ReferencesTestCase.test_callback_in_cycle_3..CcSs|j|j|jdSrmerrKrrrr cbsz9ReferencesTestCase.test_callback_in_cycle_3..C.cbNr rrrrrrr rsr)r;rrrHr6rrKr<)r r;rrrrrr test_callback_in_cycle_3sz+ReferencesTestCase.test_callback_in_cycle_3cCsdddl}Gdddt}Gddd}||}}||_||_t||j|_~~~~|dS)Nrc@seZdZddZdS)z6ReferencesTestCase.test_callback_in_cycle_4..CcSs|j|j|jdSrrrrrr rsz9ReferencesTestCase.test_callback_in_cycle_4..C.cbNrrrrr rsrc@s eZdZdS)z6ReferencesTestCase.test_callback_in_cycle_4..DNrrrrr Dsr) r;r[rrrHr6rrKr<)r r;rrrrrrr test_callback_in_cycle_4s z+ReferencesTestCase.test_callback_in_cycle_4csddl}gGfdddt}|d|d}}||_||_t||j|_t||j|_fdd}t||}~~~|g||dg||ddd=||gdS) Nrcs eZdZddZfddZdS)zAReferencesTestCase.test_callback_in_cycle_resurrection..CcSs ||_dSr)Z attribute)r valuerrr rszJReferencesTestCase.test_callback_in_cycle_resurrection..C.__init__cs|jdSr)rur\rZalistrr rszKReferencesTestCase.test_callback_in_cycle_resurrection..C.acallbackN)r rrrrrrrr rsrr5rTcsddS)N C went awayrurrrr C_went_awayszKReferencesTestCase.test_callback_in_cycle_resurrection..C_went_awayr) r;r[r\rHr6rrKrUr<)r r;rrrrrKrrr #test_callback_in_cycle_resurrections$     z6ReferencesTestCase.test_callback_in_cycle_resurrectioncsddl}gfdd}Gfdddt}||}}||_||_|j}t|||_t||j|_t||}|||~~~~|g| |dg||ddd=| |gdS)NrcsddS)Nsafe_callback calledrrrrr safe_callbackszDReferencesTestCase.test_callbacks_on_callback..safe_callbackcseZdZfddZdS)z8ReferencesTestCase.test_callbacks_on_callback..CcsddS)Nz cb calledrrrrr rsz;ReferencesTestCase.test_callbacks_on_callback..C.cbNrrrrr rsrr) r;r[r#rrHr6rKrQrUr<)r r;rrr\dr7Z external_wrrrr test_callbacks_on_callbacks(     z-ReferencesTestCase.test_callbacks_on_callbackcCs|tjdSr)check_gc_during_creationrHr6r rrr test_gc_during_ref_creation#sz.ReferencesTestCase.test_gc_during_ref_creationcCs|tjdSr)rrHrar rrr test_gc_during_proxy_creation&sz0ReferencesTestCase.test_gc_during_proxy_creationcCst}tdddtGddd}dd}|}|}||_|||_z |}t||Wtj|n tj|0dS)Nr5c@s eZdZdS)z6ReferencesTestCase.check_gc_during_creation..ANrrrrr r-srcWsdSrr)argsrrr r70sz=ReferencesTestCase.check_gc_during_creation..callback)r; get_threshold set_thresholdr<rrKrHr6)r rZ thresholdsrr7Z referencedrrrr r)s z+ReferencesTestCase.check_gc_during_creationcCsGdddt}|}dS)Nc@seZdZddZdS)z>ReferencesTestCase.test_ref_created_during_del..TargetcSst|adSr)rHr6 ref_from_delr rrr __del__HszFReferencesTestCase.test_ref_created_during_del..Target.__del__Nr rrrrrrr TargetGsr)r[)r rwrrr test_ref_created_during_delBsz.ReferencesTestCase.test_ref_created_during_delc Cs.tt}|t|jdddddtdSr0)rHr6rr^r_rr;r<)r rrrr test_initNs zReferencesTestCase.test_initcCsXGdddt}g}ttt||j}d}t||d|||gdS)Nc@s eZdZdS)z*ReferencesTestCase.test_classes..ANrrrrr rXsr)r[rHr6intrur;r<rU)r rlrrrr test_classesVs zReferencesTestCase.test_classesc Cs\td}td}td}t|}t|}t|}t|}|||k|||k|||k|||k|||k|||k|||k|||k||tk||tk~~~t|||fD]}||dq|||k|||k|||k|||k| ||k||u| ||k||udS)Nr5rT) rrHr6rwrtrr;r<rQrU) r ryzrbr\rr rrr test_equalitybs6    z ReferencesTestCase.test_equalitycCs|tjtjtjtjg}td}td}t|}t|}|D]}|t |||q<~~t |D]}|t |||qbdSr4) rltgtlegerrHr6r^r_r;r<)r opsrrrroprrr test_orderings  z ReferencesTestCase.test_orderingcCsjtd}td}t|}t|}|t|td~~t|t|td|tt|dSr) rrHr6rUr&r;r<r^r_)r rrrrrrr test_hashings  zReferencesTestCase.test_hashingcCsNGddd}t}|d}}tdD]}||||<}q*~tdS)Nc@seZdZddZdS)z1ReferencesTestCase.test_trashcan_16602..Ccs0|sdSt|fdd}t|||_dS)Ncs }dSrr)wparentrJZwselfrr rszFReferencesTestCase.test_trashcan_16602..C.__init__..cb)rHr6r)r parentrrrr rs   z:ReferencesTestCase.test_trashcan_16602..C.__init__Nr.rrrr rsrd)rHWeakKeyDictionaryryr;r<)r rrrootr\nrrr test_trashcan_16602s   z&ReferencesTestCase.test_trashcan_16602cCsDtd}dd}t||}||j|t|}||jdS)Nr5cSsdSrrrZrrr rrz.)rrHr6rQ __callback__rR)r rr7rWrXrrr test_callback_attributes   z*ReferencesTestCase.test_callback_attributecCs<td}t||j}||j~t||jdSr4) rrHr6r7rfr#rrrR)r rr6rrr &test_callback_attribute_after_deletions  z9ReferencesTestCase.test_callback_attribute_after_deletioncCsTtd}dd}t||}|tdd|_Wdn1sF0YdS)Nr5cSsdSrrrZrrr rrz@ReferencesTestCase.test_set_callback_attribute..cSsdSrrrZrrr rr)rrHr6r^AttributeErrorr#)r rr7rWrrr test_set_callback_attributes   z.ReferencesTestCase.test_set_callback_attributecCs6Gdddt}|d}t|dd}~tdS)Nc@seZdZddZdS)z;ReferencesTestCase.test_callback_gcs..ObjectWithDelcSsdSrrr rrr rrzCReferencesTestCase.test_callback_gcs..ObjectWithDel.__del__Nrrrrr ObjectWithDelsr(r5cSstSr)rrrZrrr rrz6ReferencesTestCase.test_callback_gcs..)rrHr6rr)r r(rrWrrr test_callback_gcss z$ReferencesTestCase.test_callback_gcsN):r rrrLrNr cpython_onlyrSrYr]r`rerGrMrjrmr}rrrrrrrrrqrrrrrrrrrrrrrrrrrrrrrr r rrrrr"r$r%r'r)rrrr rFesl        ((.&  % rFc@s4eZdZddZddZddZddZd d Zd S) SubclassableWeakrefTestCasecCsrGdddtj}td}||dd}|||||j||jd~t| |||jdS)Ncs*eZdZdfdd ZfddZZS)z=SubclassableWeakrefTestCase.test_subclass_refs..MyRefNrcs||_t||dSr)rsuperr)r obr7r __class__rr rszFSubclassableWeakrefTestCase.test_subclass_refs..MyRef.__init__csd|_tSNT)calledr,rr r.rr rszFSubclassableWeakrefTestCase.test_subclass_refs..MyRef.__call__)Nr)r rrrr __classcell__rrr.r MyRefsr3rr) rHr6rrQrwr1rUrrrR)r r3rJmrrrr test_subclass_refss   z.SubclassableWeakrefTestCase.test_subclass_refscCsGdddtj}td}||}t|}||||t|||g|t|d||}|t|dt|}|t|d|||d| ||dd| ||dddS)Nc@s eZdZdS)zXSubclassableWeakrefTestCase.test_subclass_refs_dont_replace_standard_refs..MyRefNrrrrr r3sr3rrTrorr5) rHr6r assertIsNotrUrrirvrQrx)r r3rJr1r2Zr3refsrrr -test_subclass_refs_dont_replace_standard_refss   zISubclassableWeakrefTestCase.test_subclass_refs_dont_replace_standard_refscCs`Gdddtj}td}||t}||t}|||t|}||||||dS)Nc@s eZdZdS)zUSubclassableWeakrefTestCase.test_subclass_refs_dont_conflate_callbacks..MyRefNrrrrr r3sr3r)rHr6ridstrr8rrx)r r3rJr9r:r;rrr *test_subclass_refs_dont_conflate_callbackss     zFSubclassableWeakrefTestCase.test_subclass_refs_dont_conflate_callbackscCshGdddtj}td}||ddd}||jd||jd||d|t|ddS)Nc@s(eZdZdZddZddZddZdS) zHSubclassableWeakrefTestCase.test_subclass_refs_with_slots..MyRefslot1slot2cSstj|||Sr)rHr6__new__)rr-r7rArBrrr rCszPSubclassableWeakrefTestCase.test_subclass_refs_with_slots..MyRef.__new__cSs||_||_dSrr@)r r-r7rArBrrr rszQSubclassableWeakrefTestCase.test_subclass_refs_with_slots..MyRef.__init__cSs |j|jSrr@r rrr methszMSubclassableWeakrefTestCase.test_subclass_refs_with_slots..MyRef.methN)r rr __slots__rCrrDrrrr r3 sr3rabcdefZabcdef__dict__) rHr6rrUrArBrDrtr)r r3rJr rrr test_subclass_refs_with_slots s z9SubclassableWeakrefTestCase.test_subclass_refs_with_slotscsGdddtj}fdd}t}|||}||_~~jdt}|||}|||}||_||_~~~jddS)z3Confirm https://bugs.python.org/issue3100 is fixed.c@s eZdZdS)zHSubclassableWeakrefTestCase.test_subclass_refs_with_cycle..MyRefNrrrrr r3#sr3csjd7_dSr4r1)rr rr r7(szKSubclassableWeakrefTestCase.test_subclass_refs_with_cycle..callbackrN)rHr6rrJrUr2r )r r3r7rJr9r:rr r test_subclass_refs_with_cycles"    z9SubclassableWeakrefTestCase.test_subclass_refs_with_cycleN)r rrr7r<r?rIrJrrrr r+s  r+c@sZeZdZddZddZddZddZd d Zd d Ze j d dZ ddZ ddZ dS)WeakMethodTestCasecCsGdddt}|S)z3Return an Object subclass overriding `some_method`.c@seZdZddZdS)z'WeakMethodTestCase._subclass..CcSsdS)Nrrr rrr r)Hsz3WeakMethodTestCase._subclass..C.some_methodN)r rrr)rrrr rGsr)r)r rrrr _subclassEszWeakMethodTestCase._subclasscCsntd}t|j}||tj||t|j||j|||j |jj | |ddS)Nr5r() rrH WeakMethodr)ZassertIsInstance ReferenceTyperrQ__self____func__rUr rJr rrr test_aliveLs zWeakMethodTestCase.test_alivecCs0td}t|j}~t||ddSr4)rrHrMr)r;r<rQrQrrr test_object_deadUs  z#WeakMethodTestCase.test_object_deadcCs:|}|d}t|j}|`t||ddSr4)rLrHrMr)r;r<rQ)r rrJr rrr test_method_dead\s  z#WeakMethodTestCase.test_method_deadcsh|}gfdd}|d}t|j|}~t||gtj|_t||gdS)Ncs|dSrrrZcallsrr rhsz=WeakMethodTestCase.test_callback_when_object_dead..cbr5)rLrHrMr)r;r<rUrr rrrJr rrUr test_callback_when_object_deadds z1WeakMethodTestCase.test_callback_when_object_deadcsd|}gfdd}|d}t|j|}|`t||g~t||gdS)Ncs|dSrrrrUrr rxsz=WeakMethodTestCase.test_callback_when_method_dead..cbr5)rLrHrMr)r;r<rUrVrrUr test_callback_when_method_deadts z1WeakMethodTestCase.test_callback_when_method_deadcCs<td}dd}t|j|}t|}~||ddS)Nr5cSsdSrr)_rrr rsz-WeakMethodTestCase.test_no_cycles..cb)rrHrMr)r6rQ)r rJrr rKrrr test_no_cycless  z!WeakMethodTestCase.test_no_cyclescsTfdd}fdd}td}td}t|j}t|j}t|j}t|j}||||||||||||||||||td} t| j} t| j} ||| ||| ||| ||| |||j||t~~~ t||||| | f} | D]:} | D].}| |k| |u| |k| |uqqdS)Ncs ||k||kdSrrwrtrrr rr _eqsz-WeakMethodTestCase.test_equality.._eqcs ||k||kdSrr[r\r rr _nesz-WeakMethodTestCase.test_equality.._ner5rT) rrHrMr)r+rr;r<rU)r r]r^rrrrr\rrerr;qr rr r rs<                    z WeakMethodTestCase.test_equalitycCstd}td}t|j}t|j}t|j}|t|t|t|}~~t|t|||t||| t t|dSr4) rrHrMr)r+rUr&r;r<r^r_)r rrrrr\Zharrr rs   zWeakMethodTestCase.test_hashingN)r rrrLrRrSrTrWrXrr*rZrrrrrr rKCs  )rKc@seZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9Zd:d;Z dd?Z"d@dAZ#dBdCZ$dDdEZ%dFdGZ&dHdIZ'dJdKZ(dLdMZ)dNdOZ*dPdQZ+dRdSZ,dTdUZ-dVdWZ.dXdYZ/dZd[Z0d\d]Z1d^d_Z2d`daZ3e4j5dbdcZ6ddS)eMappingTestCaserpc sd}ddt|D}|fdd|D}|}z t|WntyRYn0~tt|}~tt|}||d||ddS)NcSsg|] }tqSrr,.0rrrr rz4MappingTestCase.check_len_cycles..c3s|]}|VqdSrrrerJconsrr rz3MappingTestCase.check_len_cycles..)rr5r) ryitemsnext StopIterationr;r<rvrxrU) r dict_typeriNrkdctrn1n2rrhr check_len_cycless    z MappingTestCase.check_len_cyclescCs|tjdddS)NcSs|dfSr4rrrrr rrz.)rsrHrr rrr test_weak_keyed_len_cyclessz*MappingTestCase.test_weak_keyed_len_cyclescCs|tjdddS)NcSsd|fSr4rrrrr rrz=MappingTestCase.test_weak_valued_len_cycles..)rsrHWeakValueDictionaryr rrr test_weak_valued_len_cyclessz+MappingTestCase.test_weak_valued_len_cyclesc s|jtjgtRtddD]}d}tdt|||ddt|D}|fdd|D}~|}z t|WntyYn0t |}~t |} | |d| ||| | d| | |q"dS) Nr5rrbrcSsg|] }tqSrrcrdrrr rfrz2MappingTestCase.check_len_race..c3s|]}|VqdSrrrgrhrr rjrz1MappingTestCase.check_len_race..) Z addCleanupr;rrryr<rkrlrmrvZassertGreaterEqualZassertLessEqual) r rnrithrorkrprrqrrrrhr check_len_races(      zMappingTestCase.check_len_racecCs|tjdddS)NcSs|dfSr4rrrrr rrz:MappingTestCase.test_weak_keyed_len_race..)rxrHrr rrr test_weak_keyed_len_racesz(MappingTestCase.test_weak_keyed_len_racecCs|tjdddS)NcSsd|fSr4rrrrr rrz;MappingTestCase.test_weak_valued_len_race..)rxrHrur rrr test_weak_valued_len_racesz)MappingTestCase.test_weak_valued_len_racecCs|\}}|D]*}|t|d||||jdqt|}t|}| | |||d~~|t ||j |d=t |t ||j dd~~t |t |ddt }|t|jdt|d<t |t|jddS)Nr5#wrong object returned by weak dict!z/cloning of weak-valued dictionary did not work!r/deleting object did not cause dictionary updatez0deleting the values did not clear the dictionaryrT)make_weak_valued_dictrUrHrirQrrrkcopysortrvCOUNTrrur^KeyError __getitem__rr dictobjectsrJZitems1Zitems2rrr test_weak_valuess<    z MappingTestCase.test_weak_valuescCs|\}}|D]0}|t|dd|||j||dq|}|}|t|t|d~~|t ||j |d=t |t ||j dd~~t |t |ddt d}d ||<| |||d |dS) Nr5z&wrong number of weak references to %r!r{z.cloning of weak-keyed dictionary did not work!rr|z.deleting the keys did not clear the dictionaryrz$What is the meaning of the universe?")make_weak_keyed_dictrUrHrirQrrkr~setrvrrrrx assertNotInrrrr test_weak_keys(s:    zMappingTestCase.test_weak_keyscCs|\}}|||}|t|t|t|}|D]>}|}||||||||j||||q>|t|dt|}|tt|t||D]>}|}||||||||j||||q|t|ddSr0) r check_iterskeyrefsrUrvrrxrrr rrr;Zobjects2rKr-rrr test_weak_keyed_itersFs*         z%MappingTestCase.test_weak_keyed_iterscCs |\}}|||}|t|t|t|}|D]<}|}||||j||j||jj||q>|t|dt|}|tt|t||D]<}|}||||j||j||jj||q|t|ddSr0) r}r valuerefsrUrvrrr itervaluerefsrrrr test_weak_valued_itersas&     z&MappingTestCase.test_weak_valued_iterscCst|}|D]}||q||dt|}|D]}||q@||dt|}|D]}||qp||dt|}|D]}||q||ddS)Nzitems() did not touch all itemsz!__iter__() did not touch all keysz!iterkeys() did not touch all keysz%itervalues() did not touch all values)rrkrrtkeysvalues)r rrkitemrrrvrrr rzs$              zMappingTestCase.check_iterscCslt|}tt||}t||d=t|tt|t|t|dg~|t||ddS)Nr5) rvrgetattrrlr;r<rxrrU)r rrZ iter_namer!rrrr "check_weak_destroy_while_iteratings$z2MappingTestCase.check_weak_destroy_while_iteratingcCs| \}}|||Wdn1s,0Y|$\}}|t|j|Wdn1sf0Y||||$\}}|t|j|Wdn1s0Y||||\}}|||<Wdn1s0Y||||t|}|\}}||Wdn1s:0Y||||\}}|Wdn1sz0Y|t |ddSr0) rr^rrpoprUr~updateclearrv)r r testcontextrrZddictrrr -check_weak_destroy_and_mutate_while_iteratings$ * .  .  &  *  (z=MappingTestCase.check_weak_destroy_and_mutate_while_iteratingcCstd}|Vt|}|t||t||d|||<|t||Wdn1sj0Y|@|t||d||t||dWdn1s0Y|F|t||d|t|=|t||dWdn1s0Y|@|t||d||t||dWdn1sv0Y|(||t|dWdn1s0Y|t|ddS) Ni@r5rTror(r*rr)rrvrrlrrUpopitemr)r rrrJr!rrr &check_weak_del_and_len_while_iteratings..2440z6MappingTestCase.check_weak_del_and_len_while_iteratingcs|\|d|d|d|d|\tjfdd}|||\||dS)Nrrkrrc3sXzDt}t|j}tt||fVWd}tnd}t0dSrrrkrlrrr;r<r)rrrrrr rs   zKMappingTestCase.test_weak_keys_destroy_while_iterating..testcontext)rr contextlibcontextmanagerrrr rrrr &test_weak_keys_destroy_while_iteratings    z6MappingTestCase.test_weak_keys_destroy_while_iteratingcs|\|d|d|d|d|d|\tjfdd}|||\||dS)Nrrkrrrc3sXzDt}t|j}t|t|fVWd}tnd}t0dSrr)rrrrr rs   zMMappingTestCase.test_weak_values_destroy_while_iterating..testcontext)r}rrrrrrrrr (test_weak_values_destroy_while_iteratings    z8MappingTestCase.test_weak_values_destroy_while_iteratingcCs*td}t|di}|||ddSNroilrrHrrUr rJrrrr #test_make_weak_keyed_dict_from_dictsz3MappingTestCase.test_make_weak_keyed_dict_from_dictcCs4td}t|di}t|}|||ddSrrr rJrZdict2rrr .test_make_weak_keyed_dict_from_weak_keyed_dicts z>MappingTestCase.test_make_weak_keyed_dict_from_weak_keyed_dictcCs8t}tttt|j}|D]}|j||<q ||fSr)rHrrmaprryrrr rrrJrrr rs  z$MappingTestCase.make_weak_keyed_dictcCs*td}td|i}||d|dSrrrHrurUrrrr $test_make_weak_valued_dict_from_dict sz4MappingTestCase.test_make_weak_valued_dict_from_dictcCs4td}td|i}t|}||d|dSrrrrrr 0test_make_weak_valued_dict_from_weak_valued_dict%s z@MappingTestCase.test_make_weak_valued_dict_from_weak_valued_dictcCs|ttjj|ttjii|ttjddtd}dD]>}tjfi||i}|t||g||||q@dS)Nrror rr#iterable) r^r_rHrurrrUrr)r rJkwrrrr test_make_weak_valued_dict_misc+sz/MappingTestCase.test_make_weak_valued_dict_misccCs8t}tttt|j}|D]}|||j<q ||fSr)rHrurrrryrrrrrr r}7s  z%MappingTestCase.make_weak_valued_dictc Cs|}|||<|||<|t|d|\}}|t|d||urX|||n ||||\}}|t|d||ur|||n |||dS)NrTr5r)rUrvrrQ) r klasskey1value1key2value2weakdictrrrrr check_popitem>s   zMappingTestCase.check_popitemcCs|tjdtdtdS)Nrr)rrHrurr rrr test_weak_valued_dict_popitemPs z-MappingTestCase.test_weak_valued_dict_popitemcCs|tjtdtddSNzvalue 1zvalue 2)rrHrrr rrr test_weak_keyed_dict_popitemTs z,MappingTestCase.test_weak_keyed_dict_popitemcCs|||d|}|||}|||||||||||||||||}||||||||||||||dS)Nz9invalid test -- value parameters must be distinct objects)r8 setdefaultrQrxget)r rkeyrrrrJrrr check_setdefaultXs      z MappingTestCase.check_setdefaultcCs|tjdttdS)Nr)rrHrurr rrr test_weak_valued_dict_setdefaultis z0MappingTestCase.test_weak_valued_dict_setdefaultcCs|tjtdddSr)rrHrrr rrr test_weak_keyed_dict_setdefaultmsz/MappingTestCase.test_weak_keyed_dict_setdefaultcCs|}|||t|t||D]>}|||d||}||||||||q,|D]<}|||d||}||||||||qtdS)Nz(mysterious new key appeared in weak dictz%original key disappeared in weak dict)rrUrvrrxrrQ)r rrrrrrrr check_updateqs    zMappingTestCase.check_updatec Cs|tjdtdttti|ttjjt}|t|jii|t|jdd|t| gt d}dD]F}t}|jfi||i|t| |g||||q~dS)Nr5rrror) rrHrurr^r_rrUrrr)r rrJrrrr test_weak_valued_dict_updatesz,MappingTestCase.test_weak_valued_dict_updatec Cst}t}t}td|i}t||d}|}||d}d|fd|fg}||B} |t| t|t|B|t| tj||O}||| ||B} |t| t||B|t| tj||O}||| |} | |O} |t| t|t|B|t| tj||B} |t| |t|B|t| tj~|d| |d| |d| |d| dS)Nr5r5rT)r5ror*rrT) rrHrur~rUrrQrr) r rrr\Zwvd1Zwvd2Zwvd3d1pairstmp1tmp2tmp3tmp4rrr test_weak_valued_union_operatorss<      z0MappingTestCase.test_weak_valued_union_operatorsc Cs$|tjtdtdtdidS)Nr5rTro)rrHrrr rrr test_weak_keyed_dict_updatesz+MappingTestCase.test_weak_keyed_dict_updatecCsht}td}td}d||<d||<|t|d||=|t|d|t||gdS)N12 somethingrTr5)rHrrrUrvrrr ro1rhrrr test_weak_keyed_delitemsz'MappingTestCase.test_weak_keyed_delitemc Cst}t}t}t|d|di}t|d|di}|}|d|di}|df|dfg}||B} |t| t|t|B|t| tj||O}||| ||B} |t| t||B|t| tj||O}||| |} | |O} |t| t|t|B|t| tj||B} |t| |t|B|t| tj~|d| |d| |d| |d| dS) Nr5rTror(56) rrHrr~rUrrQrrr) r rrhZo3Zwkd1Zwkd2Zwkd3rrrrrrrrr test_weak_keyed_union_operatorss<   z/MappingTestCase.test_weak_keyed_union_operatorscCslt}td}td}||d<||d<|t|d|d=|t|d|t|d|fgdS)Nrrrzsomething elserTr5)rHrurrUrvrrkrrrr test_weak_valued_delitemsz(MappingTestCase.test_weak_valued_delitemcCsft}td}|t|j||t|j||t|jd|t|jd|t|jdddS)Nr ) rHrrr^rrrr_ __setitem__)r rrJrrr test_weak_keyed_bad_delitemsz+MappingTestCase.test_weak_keyed_bad_delitemcst}dGfdddtfddtdDD]}|j||<q<~t|dd}D]}|d 7}||=qnt| t |d| |d dS) NFcs*eZdZddZddZfddZdS)z.CcSs ||_dSrr5)r rrrr rszEMappingTestCase.test_weak_keyed_cascading_deletes..C.__init__cSs t|jSr)r&rr rrr r'szEMappingTestCase.test_weak_keyed_cascading_deletes..C.__hash__csr d=|j|jkS)Nrr5r"mutateobjsrr r$szCMappingTestCase.test_weak_keyed_cascading_deletes..C.__eq__N)r rrrr'r$rrrr rsrcsg|] }|qSrrrd)rrr rfrzEMappingTestCase.test_weak_keyed_cascading_deletes..r(Trr5rT) rHrr[ryrrrreverserrUrv)r rrJcountr)rrrr !test_weak_keyed_cascading_deletess"    z1MappingTestCase.test_weak_keyed_cascading_deletescCst}|t|ddS)Nz)rHru assertRegexrIr rrrr test_make_weak_valued_dict_repr5sz/MappingTestCase.test_make_weak_valued_dict_reprcCst}|t|ddS)Nz)rHrrrIrrrr test_make_weak_keyed_dict_repr9sz.MappingTestCase.test_make_weak_keyed_dict_reprcCs\t}t:tdD] }|dt}||d~qWdn1sN0YdSNirp)rHrurEryrr,r8r rrrrrr $test_threaded_weak_valued_setdefault=s   z4MappingTestCase.test_threaded_weak_valued_setdefaultcCsbt}t@tdD]&}t|d<|dd}||dqWdn1sT0YdSr)rHrurEryr,rr8rrrr test_threaded_weak_valued_popEs    z-MappingTestCase.test_threaded_weak_valued_popcCsbt}t@tdD]&}t}||d<|t|dd}qWdn1sT0YdS)Ni@ rpr5)rHrurEryr,rUrv)r rrrJrrr %test_threaded_weak_valued_consistencyMs z5MappingTestCase.test_threaded_weak_valued_consistencycsg}Gddd}Gddd}fdd}dd}||tjtjf|}g} g} td D]6} || || } } | | | | | || <~ ~ q^tj|||fd }|tjurtj|| fd }ntj|| fd }||| | |r|d dS) Nc@seZdZddZdS)z?MappingTestCase.check_threaded_weak_dict_copy..DummyKeycSs ||_dSrctrr rrrr r_szHMappingTestCase.check_threaded_weak_dict_copy..DummyKey.__init__Nr.rrrr DummyKey^src@seZdZddZdS)zAMappingTestCase.check_threaded_weak_dict_copy..DummyValuecSs ||_dSrrrrrr rcszJMappingTestCase.check_threaded_weak_dict_copy..DummyValue.__init__Nr.rrrr DummyValuebsrc sTz durt|}n|}Wn.tyN}z||WYd}~n d}~00dSr0)r~deepcopyrru)rexcrYexrrr dict_copyfs   z@MappingTestCase.check_threaded_weak_dict_copy..dict_copycSsHd}|rDtdt|d}|d7}|||ddkrtqdS)Nrr5i')randomrandintrvrr;r<)ZlstZgc_ctrrrrr pop_and_collectos  zFMappingTestCase.check_threaded_weak_dict_copy..pop_and_collectip)r?rr) rxrHrruryrur@rArBrC)r type_rrrrrrrrrrrrZt_copyZ t_collectrrr check_threaded_weak_dict_copyYs4      z-MappingTestCase.check_threaded_weak_dict_copycCs|tjddSNFrrHrr rrr test_threaded_weak_key_dict_copysz0MappingTestCase.test_threaded_weak_key_dict_copycCs|tjddSr0rr rrr $test_threaded_weak_key_dict_deepcopysz4MappingTestCase.test_threaded_weak_key_dict_deepcopycCs|tjddSrrrHrur rrr "test_threaded_weak_value_dict_copysz2MappingTestCase.test_threaded_weak_value_dict_copycCs|tjddSr0rr rrr &test_threaded_weak_value_dict_deepcopysz6MappingTestCase.test_threaded_weak_value_dict_deepcopycCst}||jjdSr)rHrurR_remove __closure__)r rrrr test_remove_closuresz#MappingTestCase.test_remove_closureN)7r rrrrsrtrvrxryrzrrrrrrrrrrrrrrrrr}rrrrrrrrrrrrrrrrrrrrrrrrrrr*rrrrr rasf  ! % % . =ra) mapping_testsc@s6eZdZdZedededdZejZddZ dS) WeakValueDictionaryTestCasez?Check that WeakValueDictionary conforms to the mapping protocolr5rTro)rrkey3cCs |jSr)!_WeakValueDictionaryTestCase__refr~r rrr _referencesz&WeakValueDictionaryTestCase._referenceN) r rr__doc__rr rHru type2testr rrrr r sr c@s:eZdZdZeddeddeddiZejZdd Z d S) WeakKeyDictionaryTestCasez=Check that WeakKeyDictionary conforms to the mapping protocolrr5rrTr rocCs |jSr)_WeakKeyDictionaryTestCase__refr~r rrr r sz$WeakKeyDictionaryTestCase._referenceN) r rrrrrrHrrr rrrr rsrc@sVeZdZGdddZddZddZddZd d Zd d Ze d dZ ddZ dS)FinalizeTestCasec@s eZdZdS)zFinalizeTestCase.ANrrrrr rsrcCstjjdkrtdS)NZcpython)sysimplementationnamerrr rrr _collect_if_necessarys z&FinalizeTestCase._collect_if_necessarycsfdd}|}gtj||dddd}||jd||||dd dif||d ||d||d||d||d||jd |d ggt||ddd}||||d if||||d if||d||d||d||d||jd |ggtj||dddd }~|||d||d||d||d||jd |d gdS)Ncs||||||Srrrrrresrr addsz+FinalizeTestCase.test_finalize..addC+Y)rT)rrrF)rrrr)rrHfinalizerUalivepeekdetachr)r rrrrrr test_finalizesB  zFinalizeTestCase.test_finalizec sfdd}|}gtj||ddddd}||||ddddf||ddddfg|t tj||dd Wdn1s0Y|t tj||dd Wdn1s0Y|ttj||ttjdS) Ncs||fdSrr)rkwargsrrr finsz-FinalizeTestCase.test_arg_errors..finr5rTror()funcrr)r&r)rr&r)rrHrrUr!r^r_)r r%rrrrr test_arg_errorss  . .z FinalizeTestCase.test_arg_errorsc Cs|}g}t||jd}t||jd}t||jd}t||jd}t||jd}~~||j||j||j||||j||d|||j|d||d~|||j|d |gd }| ||dS) Nf1f2f3f4f5rBrr)rr*r-rr+r)r(r) rrHrrurwr r"rtrrU) r rrr(r)r*r+r,Zexpectedrrr test_orders6          zFinalizeTestCase.test_ordercsGdddtj}|}gfdd}|||}t|}t|}~~||||~||||||dgdS)Nc@s eZdZdS)z4FinalizeTestCase.test_all_freed..MyFinalizerNrrrrr MyFinalizer0sr/csddS)N{rrrrr r75sz1FinalizeTestCase.test_all_freed..callbackr0)rHrrr6rfrrRrU)r r/rr7rZ wr_callbackZwr_frrr test_all_freed.s        zFinalizeTestCase.test_all_freedcs|fdd}ttdt}ttdt}t|}ttdt}|jdksVJd|_|jdksjJ|jdksxJdS)Ncs"ttd}tddddS)Ng1f3 errorr5r)rHrprint)r2clsrr errorIsz,FinalizeTestCase.run_in_child..errorr(r)r+TF)rHrr4 _global_varatexit)r6r7r(r)r*r+rr5r run_in_childGs  zFinalizeTestCase.run_in_childcCsFd}td|\}}}|d}||gd|d|vdS)NzNfrom test.test_weakref import FinalizeTestCase;FinalizeTestCase.run_in_child()z-cascii)z f4 foobarr3r2z f1 foobarsZeroDivisionError)rZassert_python_okdecode splitlinesrUrw)r progrcouterrrrr test_atexit[s zFinalizeTestCase.test_atexitN) r rrrrr#r'r.r1 classmethodr:rBrrrr rs)' ra Doctest for examples in the library reference: weakref.rst >>> from test.support import gc_collect >>> import weakref >>> class Dict(dict): ... pass ... >>> obj = Dict(red=1, green=2, blue=3) # this object is weak referencable >>> r = weakref.ref(obj) >>> print(r() is obj) True >>> import weakref >>> class Object: ... pass ... >>> o = Object() >>> r = weakref.ref(o) >>> o2 = r() >>> o is o2 True >>> del o, o2 >>> gc_collect() # For PyPy or other GCs. >>> print(r()) None >>> import weakref >>> class ExtendedRef(weakref.ref): ... def __init__(self, ob, callback=None, **annotations): ... super().__init__(ob, callback) ... self.__counter = 0 ... for k, v in annotations.items(): ... setattr(self, k, v) ... def __call__(self): ... '''Return a pair containing the referent and the number of ... times the reference has been called. ... ''' ... ob = super().__call__() ... if ob is not None: ... self.__counter += 1 ... ob = (ob, self.__counter) ... return ob ... >>> class A: # not in docs from here, just testing the ExtendedRef ... pass ... >>> a = A() >>> r = ExtendedRef(a, foo=1, bar="baz") >>> r.foo 1 >>> r.bar 'baz' >>> r()[1] 1 >>> r()[1] 2 >>> r()[0] is a True >>> import weakref >>> _id2obj_dict = weakref.WeakValueDictionary() >>> def remember(obj): ... oid = id(obj) ... _id2obj_dict[oid] = obj ... return oid ... >>> def id2obj(oid): ... return _id2obj_dict[oid] ... >>> a = A() # from here, just testing >>> a_id = remember(a) >>> id2obj(a_id) is a True >>> del a >>> gc_collect() # For PyPy or other GCs. >>> try: ... id2obj(a_id) ... except KeyError: ... print('OK') ... else: ... print('WeakValueDictionary error') OK libreftestc Cs*ttttttttt t j t dSr) rZ run_unittestrFrKrar rr+rZ run_doctestrmodulesr rrrr test_mains rF__main__)r8)*r;rZunittestrrrHrrr~r@r9rtestrZ test.supportrrrrr8rrrrrr,ZTestCaser/rrErFr+rKrar ZBasicTestMappingProtocolr rrrDZ__test__rFr rrrr sd    |h i $V