HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //proc/thread-self/root/usr/local/lib/python3.7/test/__pycache__/test_weakref.cpython-37.pyc
B

��g��@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddl
mZdadZGdd�d�ZGdd�d�Zd	d
�Zdd�ZGd
d�d�ZGdd�d�ZGdd�dej�Zejd*dd��ZGdd�de�ZGdd�de�ZGdd�dej�ZGdd�de�ZddlmZGdd �d ej �Z!Gd!d"�d"ej �Z"Gd#d$�d$ej�Z#d%Z$d&e$iZ%d'd(�Z&e'd)k�r�e&�dS)+�N)�support)�
script_helperZfoobarc@seZdZdd�ZdS)�CcCsdS)N�)�selfrr�-/usr/local/lib/python3.7/test/test_weakref.py�methodszC.methodN)�__name__�
__module__�__qualname__rrrrrrsrc@seZdZdZdd�ZdS)�CallableNcCs
||_dS)N)�bar)r�xrrr�__call__szCallable.__call__)r	r
rr
rrrrrrsrcCsdd�}|S)NcSsdS)Nrrrrr�f$�zcreate_function.<locals>.fr)rrrr�create_function#srcCst�jS)N)rrrrrr�create_bound_method'src@sDeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�ObjectcCs
||_dS)N)�arg)rrrrr�__init__,szObject.__init__cCs
d|jS)Nz<Object %r>)r)rrrr�__repr__.szObject.__repr__cCst|t�r|j|jkStS)N)�
isinstancerr�NotImplemented)r�otherrrr�__eq__0s
z
Object.__eq__cCst|t�r|j|jkStS)N)rrrr)rrrrr�__lt__4s
z
Object.__lt__cCs
t|j�S)N)�hashr)rrrr�__hash__8szObject.__hash__cCsdS)N�r)rrrr�some_method:szObject.some_methodcCsdS)N�r)rrrr�other_method<szObject.other_methodN)
r	r
rrrrrrr r"rrrrr+src@seZdZdd�ZdS)�RefCyclecCs
||_dS)N)�cycle)rrrrrAszRefCycle.__init__N)r	r
rrrrrrr#@sr#c@seZdZdd�Zdd�ZdS)�TestBasecCs
d|_dS)Nr)�cbcalled)rrrr�setUpGszTestBase.setUpcCs|jd7_dS)N�)r&)r�refrrr�callbackJszTestBase.callbackN)r	r
rr'r*rrrrr%Esr%�-C��6?c	#sXd���fdd�}t���4tj|d�}|��z
dVWdd�|��XWdQRXdS)zR
    Ensure GC collections happen in a different thread, at a high frequency.
    Fcs x�st���t��qWdS)N)�timeZsleep�gc�collectr)�period�please_stoprrr.Us
z"collect_in_thread.<locals>.collect)�targetNT)rZ
disable_gc�	threading�Thread�start�join)r/r.�tr)r/r0r�collect_in_threadNs

r7c@s�eZdZdd�Zdd�Zejdd��Zdd�Zd	d
�Z	dd�Z
d
d�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Z d9d:�Z!d;d<�Z"d=d>�Z#d?d@�Z$ej%dAdB��Z&dCdD�Z'dEdF�Z(dGdH�Z)dIdJ�Z*dKdL�Z+dMdN�Z,dOdP�Z-dQdR�Z.dSdT�Z/dUdV�Z0dWdX�Z1dYdZ�Z2d[d\�Z3d]d^�Z4d_d`�Z5daS)b�ReferencesTestCasecCsD|�t�|�t�|�t�t�}t�|�}t|�~t|�dS)N)�check_basic_refrrr�weakrefr)�repr)r�o�wrrrr�test_basic_reffs



z!ReferencesTestCase.test_basic_refcCs"|�t�|�t�|�t�dS)N)�check_basic_callbackrrr)rrrr�test_basic_callbackts

z&ReferencesTestCase.test_basic_callbackcCsRddl}|j}|�}t�|�}|�|�|�~|�|��|�|�|�|�dS)Nr)�	_testcapi�create_cfunctionr:r)�assertIs�assertIsNoner9r?)rrArBrr=rrr�test_cfunctionys

z!ReferencesTestCase.test_cfunctioncCsTt�}t�||j�}t�||j�}~|�|�d�|�|�d�|�|jdd�dS)Nz$expected reference to be invalidated�z-callback not called the right number of times)rr:r)r*rD�assertEqualr&)rr<�ref1�ref2rrr�test_multiple_callbacks�s
z*ReferencesTestCase.test_multiple_callbackscCs2|fdd�}t�}t�||�|_t�||�}~dS)NcSs|��dS)N)r))�objectrrrrr*�szDReferencesTestCase.test_multiple_selfref_callbacks.<locals>.callback)rr:r))rr*�crHrrr�test_multiple_selfref_callbacks�s
z2ReferencesTestCase.test_multiple_selfref_callbackscCst�}|jttj|dd�dS)N)r*)r�assertRaises�	TypeErrorr:r))rrLrrr�test_constructor_kwargs�sz*ReferencesTestCase.test_constructor_kwargscCsvt�}d|_t�||j�}t�||j�}~dd�}|�t||�|�t||�|�ttt�t���|�|j	d�dS)Nr(cSs
|jdS)N)r
)�proxyrrr�check�sz0ReferencesTestCase.test_proxy_ref.<locals>.checkrF)
rr
r:rQr*rN�ReferenceError�boolrGr&)rr<rHrIrRrrr�test_proxy_ref�sz!ReferencesTestCase.test_proxy_refcCs6|�}t�|�}|�|�d�|�}|�||d�dS)Nz,weak reference to live object should be livez-<ref>() should return original object if live)r:r)�assertIsNotNonerC)r�factoryr<r)�o2rrrr9�s
z"ReferencesTestCase.check_basic_refcCs>d|_|�}t�||j�}~|�|jdd�|�|�d�dS)Nrr(z(callback did not properly set 'cbcalled'z3ref2 should be dead after deleting object reference)r&r:r)r*rGrD)rrWr<r)rrrr?�s
z'ReferencesTestCase.check_basic_callbackcCs�t�}t�|�}t�|�}t�|�}|�||d�t�}t�|�}t�|�}t�|�}|�||d�|�t�|�dd�~|�t�|�dd�dS)Nz1reference object w/out callback should be re-usedrFzwrong weak ref count for objectr(z4wrong weak ref count for object after deleting proxy)rr:r)rQrCrG�getweakrefcount)rr<rHrQrIrrr�test_ref_reuse�s"





z!ReferencesTestCase.test_ref_reusecCs6t�}t�|�}t�|�}t�|�}|�||d�dS)Nz4proxy object w/out callback should have been re-used)rr:rQr)rC)rr<�proxy1r)�proxy2rrr�test_proxy_reuse�s


z#ReferencesTestCase.test_proxy_reusecCsnt�}|�|t�|��t��}t�|�}|�|d�|�d�|�t	|�d�|�
|d�ddg|dd�<|�t	|�d�|�t	|�d�|�d|d�d|d<|�|dd�|�|dd�t�|�}t�|�}|�||�t�td	��}t�|�}|�|dd�|dd��|�|dd�|dd��|�|dd�|dd��|�|dd�|dd��dS)
Nz(proxy for empty UserList should be false�r(z+proxy for non-empty UserList should be truerF�z,proxy didn't support __contains__() properlyr!�
)
r�check_proxyr:rQ�collections�UserList�assertFalse�appendrG�len�
assertTrue�assertIn�range)rr<�L�pZL2�p2ZL3Zp3rrr�test_basic_proxy�s0




z#ReferencesTestCase.test_basic_proxycCsFGdd�dt�}|�}|�dtt�|���|�tt�|��d�dS)Nc@seZdZdd�Zdd�ZdS)z0ReferencesTestCase.test_proxy_unicode.<locals>.CcSsdS)N�stringr)rrrr�__str__sz8ReferencesTestCase.test_proxy_unicode.<locals>.C.__str__cSsdS)Nsbytesr)rrrr�	__bytes__sz:ReferencesTestCase.test_proxy_unicode.<locals>.C.__bytes__N)r	r
rrorprrrrrsrrpsbytes)rKrh�dirr:rQrG�bytes)rr�instancerrr�test_proxy_unicodesz%ReferencesTestCase.test_proxy_unicodecCs4Gdd�d�}|�}t�|�}|�t�|�d�dS)Nc@seZdZdd�ZdS)z.ReferencesTestCase.test_proxy_index.<locals>.CcSsdS)Nr`r)rrrr�	__index__sz8ReferencesTestCase.test_proxy_index.<locals>.C.__index__N)r	r
rrurrrrr
srr`)r:rQrG�operator�index)rrr<rkrrr�test_proxy_indexs
z#ReferencesTestCase.test_proxy_indexcCsFGdd�d�}|�}t�|�}|�|dd�|d}|�|d�dS)Nc@seZdZdd�Zdd�ZdS)z,ReferencesTestCase.test_proxy_div.<locals>.CcSsdS)N�*r)rrrrr�__floordiv__sz9ReferencesTestCase.test_proxy_div.<locals>.C.__floordiv__cSsdS)N�r)rrrrr�
__ifloordiv__sz:ReferencesTestCase.test_proxy_div.<locals>.C.__ifloordiv__N)r	r
rrzr|rrrrrsrr!ryr{)r:rQrG)rrr<rkrrr�test_proxy_divs
z!ReferencesTestCase.test_proxy_divcCs|�tj�dS)N)�check_shared_without_callbackr:r))rrrr� test_shared_ref_without_callback(sz3ReferencesTestCase.test_shared_ref_without_callbackcCs|�tj�dS)N)r~r:rQ)rrrr�"test_shared_proxy_without_callback+sz5ReferencesTestCase.test_shared_proxy_without_callbackcCs�td�}||d�}||d�}|�||d�~~||�}||d�}|�||d�~~||�}||�}|�||d�~~||d�}||�}|�||d�dS)Nr(z%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)rrC)r�makerefr<Zp1rlrrrr~.s 



z0ReferencesTestCase.check_shared_without_callbackcCs�t�}t�|�}|�||�|�t|�tjd�|d�|�|jdd�|dd�|�|jdd�|�	t
|�|�	t
|ddd�dS)	Nzproxy is not of callable typez	twinkies!z1call through proxy not passed through to originalzSplat.)rr(rFr_)rr:rQrarC�type�CallableProxyTyperGr
rNrO)rr<rHrrr�test_callable_proxy@s



z&ReferencesTestCase.test_callable_proxycCs�d|_|�|jdd�d|_|�|jdd�|`|�t|d�d�d|_|�|jdd�d|_|�|jdd�|`|�t|d�d	�dS)
Nr(z)proxy does not reflect attribute additionrFz-proxy does not reflect attribute modification�fooz(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)r�rGrd�hasattr)rr<rQrrrraUs$



zReferencesTestCase.check_proxycCs6Gdd�d�}|�}t�|�}|d=|�|jd�dS)Nc@seZdZdZdd�ZdS)z3ReferencesTestCase.test_proxy_deletion.<locals>.FooNcSs
||_dS)N)�result)rZaccessorrrr�__delitem__nsz?ReferencesTestCase.test_proxy_deletion.<locals>.Foo.__delitem__)r	r
rr�r�rrrr�Foolsr�r)r:rQrGr�)rr��grrrr�test_proxy_deletionjs

z&ReferencesTestCase.test_proxy_deletioncCs4Gdd�dt�}|�}|�tt�|��t|��dS)Nc@seZdZdS)z0ReferencesTestCase.test_proxy_bool.<locals>.ListN)r	r
rrrrr�Listwsr�)�listrGrTr:rQ)rr�Zlystrrr�test_proxy_boolusz"ReferencesTestCase.test_proxy_boolc	sHd�G�fdd�d�}|��t���}|�t��d|kWdQRXdS)NcseZdZ�fdd�ZdS)z1ReferencesTestCase.test_proxy_iter.<locals>.MyObjcs�tS)N)r)r)�objrr�__iter__�sz:ReferencesTestCase.test_proxy_iter.<locals>.MyObj.__iter__N)r	r
rr�r)r�rr�MyObj�sr�Zblech)r:rQrNrO)rr�rkr)r�r�test_proxy_iter{s
z"ReferencesTestCase.test_proxy_itercCs�t�}t�|�}t�||j�}|�t�|�dd�t�|�}t�||j�}|�t�|�dd�~~~~|�t�|�dd�|�t�d�dd�dS)NrFz*got wrong number of weak reference objectsrrzAweak reference objects not unlinked from referent when discarded.r(z2got wrong number of weak reference objects for int)rr:r)r*rGrYrQ)rr<rHrIr[r\rrr�test_getweakrefcount�s

z'ReferencesTestCase.test_getweakrefcountcCs�t�}t�||j�}t�||j�}~|�t�|�|gd�t�}t�||j�}t�||j�}~|�t�|�|gd�~|�t�|�gd�|�t�d�gd�dS)Nzlist of refs does not matchzlist of refs not clearedr(z#list of refs does not match for int)rr:r)r*rG�getweakrefs)rr<rHrIrrr�test_getweakrefs�s"z#ReferencesTestCase.test_getweakrefscCsFGdd�dt�}|d�}t�|�}|�|dd�|�d|d�dS)Nc@seZdZdS)z6ReferencesTestCase.test_newstyle_number_ops.<locals>.FN)r	r
rrrrr�F�sr�g@g�?g@)�floatr:rQrG)rr�rrkrrr�test_newstyle_number_ops�s

z+ReferencesTestCase.test_newstyle_number_opscs�Gdd�dt��i��fdd�����fdd�}y
|�Wn�k
rNYnX|�d�y
|�Wn�k
rxYnX|�d�dS)Nc@seZdZdS)z?ReferencesTestCase.test_callbacks_protected.<locals>.BogusErrorN)r	r
rrrrr�
BogusError�sr�cs
�|=dS)Nr)�k)�datarr�remove�sz;ReferencesTestCase.test_callbacks_protected.<locals>.removecs dd�}d�t�|��<��dS)NcSsdS)Nrrrrrr�<lambda>�rzRReferencesTestCase.test_callbacks_protected.<locals>.encapsulate.<locals>.<lambda>)r:r))r)r�r�r�rr�encapsulate�sz@ReferencesTestCase.test_callbacks_protected.<locals>.encapsulatezexception not properly restored)�	ExceptionZfail)rr�r)r�r�r�r�test_callbacks_protected�s


z+ReferencesTestCase.test_callbacks_protectedcsnddl�Gdd�dt�}|�}t�|�fdd��}~~|�}|�|_t�|j�fdd��}|�}||_~~dS)Nrc@seZdZdS)z0ReferencesTestCase.test_sf_bug_840829.<locals>.CN)r	r
rrrrrr�srcs���S)N)r.)�ignore)r-rrr��rz7ReferencesTestCase.test_sf_bug_840829.<locals>.<lambda>cs���S)N)r.)r�)r-rrr��r)r-rKr:r)�i�c1)rrrLr=r��c2r)r-r�test_sf_bug_840829�s	z%ReferencesTestCase.test_sf_bug_840829cCsVddl}Gdd�dt�}Gdd�dt�}|�}||_t�||j�|_~~~|��dS)Nrc@seZdZdS)z6ReferencesTestCase.test_callback_in_cycle_1.<locals>.JN)r	r
rrrrr�Jsr�c@seZdZdd�ZdS)z7ReferencesTestCase.test_callback_in_cycle_1.<locals>.IIcSs
|jdS)N)r�)rr�rrr�	acallbackszAReferencesTestCase.test_callback_in_cycle_1.<locals>.II.acallbackN)r	r
rr�rrrr�II
sr�)r-rKr�r:r)r�r=r.)rr-r�r��Irrr�test_callback_in_cycle_1sz+ReferencesTestCase.test_callback_in_cycle_1cCsTddl}Gdd�dt�}Gdd�d�}|�}||_t�||j�|_~~~|��dS)Nrc@seZdZdS)z6ReferencesTestCase.test_callback_in_cycle_2.<locals>.JN)r	r
rrrrrr�;sr�c@seZdZdd�ZdS)z7ReferencesTestCase.test_callback_in_cycle_2.<locals>.IIcSs
|jdS)N)r�)rr�rrrr�?szAReferencesTestCase.test_callback_in_cycle_2.<locals>.II.acallbackN)r	r
rr�rrrrr�>sr�)r-rKr�r:r)r�r=r.)rr-r�r�r�rrr�test_callback_in_cycle_2,sz+ReferencesTestCase.test_callback_in_cycle_2cCsPddl}Gdd�d�}|�|�}}||_||_t�||j�|_~~|��dS)Nrc@seZdZdd�ZdS)z6ReferencesTestCase.test_callback_in_cycle_3.<locals>.CcSs|j|j|jdS)N)�mer�r=)rr�rrr�cbSsz9ReferencesTestCase.test_callback_in_cycle_3.<locals>.C.cbN)r	r
rr�rrrrrRsr)r-r�r�r:r)r�r=r.)rr-rr�r�rrr�test_callback_in_cycle_3Isz+ReferencesTestCase.test_callback_in_cycle_3cCsdddl}Gdd�dt�}Gdd�d�}|�|�}}||_||_t�||j�|_~~~~|��dS)Nrc@seZdZdd�ZdS)z6ReferencesTestCase.test_callback_in_cycle_4.<locals>.CcSs|j|j|jdS)N)r�r�r=)rr�rrrr�lsz9ReferencesTestCase.test_callback_in_cycle_4.<locals>.C.cbN)r	r
rr�rrrrrksrc@seZdZdS)z6ReferencesTestCase.test_callback_in_cycle_4.<locals>.DN)r	r
rrrrr�Dqsr�)	r-rKr�r�r:r)r�r=r.)rr-rr�r�r�rrr�test_callback_in_cycle_4as	z+ReferencesTestCase.test_callback_in_cycle_4cs�ddl}g�G�fdd�dt�}|d�|d�}}||_||_t�||j�|_t�||j�|_�fdd�}t�||�}~~~|��g�|��|��dg�|�|�d��dd�=|��|��g�dS)	Nrcs eZdZdd�Z�fdd�ZdS)zAReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.CcSs
||_dS)N)Z	attribute)r�valuerrrr�szJReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C.__init__cs��|j�dS)N)rerL)rr�)�alistrrr��szKReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C.acallbackN)r	r
rrr�r)r�rrr�srr(rFcs��d�dS)NzC went away)re)r�)r�rr�C_went_away�szKReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C_went_awayzC went away)	r-rKrLr:r)r�r=rGr.)rr-rr�r�r�r=r)r�r�#test_callback_in_cycle_resurrection}s$
z6ReferencesTestCase.test_callback_in_cycle_resurrectioncs�ddl}g��fdd�}G�fdd�dt�}|�|�}}||_||_|j}t�||�|_t�||j�|_t�||�}|�|�|�~~~~|��g�|�	�|��dg�|�|�d��dd�=|�	�|��g�dS)Nrcs��d�dS)Nzsafe_callback called)re)r�)r�rr�
safe_callback�szDReferencesTestCase.test_callbacks_on_callback.<locals>.safe_callbackcseZdZ�fdd�ZdS)z8ReferencesTestCase.test_callbacks_on_callback.<locals>.Ccs��d�dS)Nz	cb called)re)rr�)r�rrr��sz;ReferencesTestCase.test_callbacks_on_callback.<locals>.C.cbN)r	r
rr�r)r�rrr�srzsafe_callback called)
r-rKrr�r:r)r=rCrGr.)rr-r�rrL�dr*Zexternal_wrr)r�r�test_callbacks_on_callback�s(	
z-ReferencesTestCase.test_callbacks_on_callbackcCs|�tj�dS)N)�check_gc_during_creationr:r))rrrr�test_gc_during_ref_creation�sz.ReferencesTestCase.test_gc_during_ref_creationcCs|�tj�dS)N)r�r:rQ)rrrr�test_gc_during_proxy_creation�sz0ReferencesTestCase.test_gc_during_proxy_creationcCsxt��}t�ddd�t��Gdd�d�}dd�}|�}|�}||_||�|_z|�}t�||�Wdtj|�XdS)Nr(c@seZdZdS)z6ReferencesTestCase.check_gc_during_creation.<locals>.AN)r	r
rrrrr�A�sr�cWsdS)Nr)�argsrrrr*�sz=ReferencesTestCase.check_gc_during_creation.<locals>.callback)r-�
get_threshold�
set_thresholdr.�ar=r:r))rr�Z
thresholdsr�r*Z
referencedr�rrrr��s
z+ReferencesTestCase.check_gc_during_creationcCsGdd�dt�}|�}dS)Nc@seZdZdd�ZdS)z>ReferencesTestCase.test_ref_created_during_del.<locals>.TargetcSst�|�adS)N)r:r)�ref_from_del)rrrr�__del__�szFReferencesTestCase.test_ref_created_during_del.<locals>.Target.__del__N)r	r
rr�rrrr�Target�sr�)rK)rr��wrrr�test_ref_created_during_del�sz.ReferencesTestCase.test_ref_created_during_delc	Cs.t�t�}|�t|jddddd�t��dS)Nr)r:r)r�rNrOrr-r.)r�rrrr�	test_init�s
zReferencesTestCase.test_initcCsXGdd�dt�}g}t�t�t�||j�}d}t��|�|�d�|�||g�dS)Nc@seZdZdS)z*ReferencesTestCase.test_classes.<locals>.AN)r	r
rrrrrr�sr�)rKr:r)�intrer-r.rG)rr��lr�rrr�test_classess
zReferencesTestCase.test_classesc	Cs(td�}td�}td�}t�|�}t�|�}t�|�}t�|�}|�||k�|�||k�|�||k�|�||k�|�||k�|�||k�~~~t��x |||fD]}|�|�d�q�W|�||k�|�||k�|�||k�|�||k�|�||k||k�|�||k||k	�dS)Nr(rF)	rr:r)rgrdr-r.rCrG)	rr�y�zr��brLr�r�rrr�
test_equalitys.



z ReferencesTestCase.test_equalitycCs�tjtjtjtjg}td�}td�}t�|�}t�|�}x|D]}|�t	|||�q>W~~t
��x|D]}|�t	|||�qhWdS)Nr()rv�lt�gt�le�gerr:r)rNrOr-r.)rZopsrr�r�r��oprrr�
test_ordering2s



z ReferencesTestCase.test_orderingcCsjtd�}td�}t�|�}t�|�}|�t|�td��~~t��|�t|�td��|�tt|�dS)Nry)	rr:r)rGrr-r.rNrO)rrr�r�r�rrr�test_hashingAs

zReferencesTestCase.test_hashingcCsRGdd�d�}t��}|d�}}x td�D]}||�||<}q,W~t��dS)Nc@seZdZdd�ZdS)z1ReferencesTestCase.test_trashcan_16602.<locals>.Ccs0|sdSt�|���fdd�}t�||�|_dS)Ncs
��}dS)Nr)�wparentr<)�wselfrrr�ZszFReferencesTestCase.test_trashcan_16602.<locals>.C.__init__.<locals>.cb)r:r)r�)r�parentr�r)r�rrVs

z:ReferencesTestCase.test_trashcan_16602.<locals>.C.__init__N)r	r
rrrrrrrUsr�d)r:�WeakKeyDictionaryrir-r.)rrr��rootrL�nrrr�test_trashcan_16602Ps	z&ReferencesTestCase.test_trashcan_16602cCsDtd�}dd�}t�||�}|�|j|�t�|�}|�|j�dS)Nr(cSsdS)Nr)r)rrrr�grz<ReferencesTestCase.test_callback_attribute.<locals>.<lambda>)rr:r)rC�__callback__rD)rrr*rHrIrrr�test_callback_attributees
z*ReferencesTestCase.test_callback_attributecCs<td�}t�||j�}|�|j�~t��|�|j�dS)Nr()	rr:r)r*rVr�r�
gc_collectrD)rrr)rrr�&test_callback_attribute_after_deletionnsz9ReferencesTestCase.test_callback_attribute_after_deletionc	Cs@td�}dd�}t�||�}|�t��dd�|_WdQRXdS)Nr(cSsdS)Nr)r)rrrr�xrz@ReferencesTestCase.test_set_callback_attribute.<locals>.<lambda>cSsdS)Nr)r)rrrr�{r)rr:r)rN�AttributeErrorr�)rrr*rHrrr�test_set_callback_attributevs
z.ReferencesTestCase.test_set_callback_attributecCs6Gdd�dt�}|d�}t�|dd��}~t��dS)Nc@seZdZdd�ZdS)z;ReferencesTestCase.test_callback_gcs.<locals>.ObjectWithDelcSsdS)Nr)rrrrr�rzCReferencesTestCase.test_callback_gcs.<locals>.ObjectWithDel.__del__N)r	r
rr�rrrr�
ObjectWithDel~sr�r(cSst��S)N)rr�)r)rrrr��rz6ReferencesTestCase.test_callback_gcs.<locals>.<lambda>)rr:r)rr�)rr�rrHrrr�test_callback_gcs}s
z$ReferencesTestCase.test_callback_gcsN)6r	r
rr>r@r�cpython_onlyrErJrMrPrUr9r?rZr]rmrtrxr}rr�r~r�rar�r�r�r�r�r�r�r�r�r�r�r�Zrequires_type_collectingr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr8ds`
	
((/&!	r8c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�SubclassableWeakrefTestCasecCslGdd�dtj�}td�}||dd�}|�|�|�|�|j�|�|jd�~|�|��|�|j�dS)Ncs*eZdZd�fdd�	Z�fdd�Z�ZS)z=SubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRefNrycs||_t��||�dS)N)r��superr)r�obr*r�)�	__class__rrr�szFSubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRef.__init__csd|_t���S)NT)�calledr�r)r)r�rrr�szFSubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRef.__call__)Nry)r	r
rrr�
__classcell__rr)r�r�MyRef�sr�r��)r�)	r:r)rrCrgr�rGr�rD)rr�r<�mrrrr�test_subclass_refs�sz.SubclassableWeakrefTestCase.test_subclass_refscCs�Gdd�dtj�}td�}||�}t�|�}|�||�|�t�|�||g�|�t�|�d�||�}|�t�|�d�t�|�}|�t|�d�|�||d�|�	||dd��|�	||dd��dS)Nc@seZdZdS)zXSubclassableWeakrefTestCase.test_subclass_refs_dont_replace_standard_refs.<locals>.MyRefN)r	r
rrrrrr��sr�ryrFr_rr()
r:r)r�assertIsNotrGr�rYrfrCrh)rr�r<�r1�r2Zr3�refsrrr�-test_subclass_refs_dont_replace_standard_refs�s

zISubclassableWeakrefTestCase.test_subclass_refs_dont_replace_standard_refscCs`Gdd�dtj�}td�}||t�}||t�}|�||�t�|�}|�||�|�||�dS)Nc@seZdZdS)zUSubclassableWeakrefTestCase.test_subclass_refs_dont_conflate_callbacks.<locals>.MyRefN)r	r
rrrrrr��sr�ry)r:r)r�id�strr�r�rh)rr�r<r�r�r�rrr�*test_subclass_refs_dont_conflate_callbacks�s


zFSubclassableWeakrefTestCase.test_subclass_refs_dont_conflate_callbackscCshGdd�dtj�}td�}||ddd�}|�|jd�|�|jd�|�|��d�|�t|d��dS)Nc@s(eZdZdZdd�Zdd�Zdd�ZdS)	zHSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef)�slot1�slot2cSstj�|||�S)N)r:r)�__new__)r�r�r*r�r�rrrr��szPSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.__new__cSs||_||_dS)N)r�r�)rr�r*r�r�rrrr�szQSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.__init__cSs|j|jS)N)r�r�)rrrr�meth�szMSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.methN)r	r
r�	__slots__r�rr�rrrrr��sr�ry�abc�defZabcdef�__dict__)	r:r)rrGr�r�r�rdr�)rr�r<r�rrr�test_subclass_refs_with_slots�s	z9SubclassableWeakrefTestCase.test_subclass_refs_with_slotscs�Gdd�dtj�}�fdd�}t�}|||�}||_~~���jd�t�}|||�}|||�}||_||_~~~���jd�dS)z3Confirm https://bugs.python.org/issue3100 is fixed.c@seZdZdS)zHSubclassableWeakrefTestCase.test_subclass_refs_with_cycle.<locals>.MyRefN)r	r
rrrrrr��sr�cs�jd7_dS)Nr()r&)r�)rrrr*�szKSubclassableWeakrefTestCase.test_subclass_refs_with_cycle.<locals>.callbackrN)r:r)rr<rGr&r�)rr�r*r<r�r�r)rr�test_subclass_refs_with_cycle�s"


z9SubclassableWeakrefTestCase.test_subclass_refs_with_cycleN)r	r
rr�r�r�rrrrrrr��s
r�c@sZeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	j
d
d��Zdd�Zdd�Z
dS)�WeakMethodTestCasecCsGdd�dt�}|S)z3Return an Object subclass overriding `some_method`.c@seZdZdd�ZdS)z'WeakMethodTestCase._subclass.<locals>.CcSsdS)N�r)rrrrr �sz3WeakMethodTestCase._subclass.<locals>.C.some_methodN)r	r
rr rrrrr�sr)r)rrrrr�	_subclass�szWeakMethodTestCase._subclasscCsntd�}t�|j�}|�|tj�|�|�t|j��|�|�j|�|�|�j	|jj	�|�
|��d�dS)Nr(r)rr:�
WeakMethodr ZassertIsInstance�
ReferenceTyper�rC�__self__�__func__rG)rr<r�rrr�
test_alive�szWeakMethodTestCase.test_alivecCs0td�}t�|j�}~t��|�|�d�dS)Nr()rr:rr r-r.rC)rr<r�rrr�test_object_dead�s
z#WeakMethodTestCase.test_object_deadcCs:|��}|d�}t�|j�}|`t��|�|�d�dS)Nr()rr:rr r-r.rC)rrr<r�rrr�test_method_deadsz#WeakMethodTestCase.test_method_deadcsh|��}g��fdd�}|d�}t�|j|�}~t��|��|g�tj|_t��|��|g�dS)Ncs��|�dS)N)re)r)�callsrrr�sz=WeakMethodTestCase.test_callback_when_object_dead.<locals>.cbr()rr:rr r-r.rGr)rrr�r<r�r)rr�test_callback_when_object_deadsz1WeakMethodTestCase.test_callback_when_object_deadcsd|��}g��fdd�}|d�}t�|j|�}|`t��|��|g�~t��|��|g�dS)Ncs��|�dS)N)re)r)rrrr�"sz=WeakMethodTestCase.test_callback_when_method_dead.<locals>.cbr()rr:rr r-r.rG)rrr�r<r�r)rr�test_callback_when_method_deadsz1WeakMethodTestCase.test_callback_when_method_deadcCs<td�}dd�}t�|j|�}t�|�}~|�|�d�dS)Nr(cSsdS)Nr)�_rrrr�2sz-WeakMethodTestCase.test_no_cycles.<locals>.cb)rr:rr r)rC)rr<r�r�r=rrr�test_no_cycles.s
z!WeakMethodTestCase.test_no_cyclescsF�fdd�}�fdd�}td�}td�}t�|j�}t�|j�}t�|j�}t�|j�}|||�|||�|||�|||�|||�|||�td�}	t�|	j�}
t�|	j�}|||
�|||�|||
�|||�~~~	t��|||||
|f}xF|D]>}
x6|D].}��|
|k|
|k���|
|k|
|k	��q
W�qWdS)Ncs ��||k���||k�dS)N)rgrd)r�r�)rrr�_eq:sz-WeakMethodTestCase.test_equality.<locals>._eqcs ��||k���||k�dS)N)rgrd)r�r�)rrr�_ne=sz-WeakMethodTestCase.test_equality.<locals>._ner(rF)rr:rr r"r-r.rG)rrrrr�r�r�rLr�r��err��qr�r)rrr�9s8











z WeakMethodTestCase.test_equalitycCs�td�}td�}t�|j�}t�|j�}t�|j�}|�t|�t|��t|�}~~t��|�t|�|�|�t|�|�|�	t
t|�dS)Nr()rr:rr r"rGrr-r.rNrO)rrr�r�r�rLZharrrr�_szWeakMethodTestCase.test_hashingN)r	r
rrr	r
rr
rrr�rr�r�rrrrr�s	&rc@s�eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Z d<d=�Z!d>d?�Z"d@dA�Z#dBdC�Z$dDdE�Z%dFdG�Z&dHdI�Z'dJdK�Z(dLdM�Z)dNdO�Z*dPdQ�Z+dRdS�Z,dTdU�Z-dVdW�Z.dXdY�Z/dZd[�Z0d\d]�Z1e2j3d^d_��Z4d`S)a�MappingTestCaser`c	s�d}dd�t|�D�}|�fdd�|D��}|��}yt|�Wntk
rTYnX~t��t|�}~t��t|�}|�|d�|�|d�dS)N�cSsg|]
}t��qSr)r#)�.0r�rrr�
<listcomp>ysz4MappingTestCase.check_len_cycles.<locals>.<listcomp>c3s|]}�|�VqdS)Nr)rr<)�consrr�	<genexpr>zsz3MappingTestCase.check_len_cycles.<locals>.<genexpr>)rr(r)	ri�items�next�
StopIterationr-r.rfrhrG)	r�	dict_typer�Nr�dct�it�n1�n2r)rr�check_len_cyclesws z MappingTestCase.check_len_cyclescCs|�tjdd��dS)NcSs|dfS)Nr(r)r�rrrr��rz<MappingTestCase.test_weak_keyed_len_cycles.<locals>.<lambda>)r$r:r�)rrrr�test_weak_keyed_len_cycles�sz*MappingTestCase.test_weak_keyed_len_cyclescCs|�tjdd��dS)NcSsd|fS)Nr(r)r�rrrr��rz=MappingTestCase.test_weak_valued_len_cycles.<locals>.<lambda>)r$r:�WeakValueDictionary)rrrr�test_weak_valued_len_cycles�sz+MappingTestCase.test_weak_valued_len_cyclesc
	s�|jtjft����x�tdd�D]�}d}t�d�t�|||�dd�t|�D�}|�fdd�|D��}~|��}yt|�Wntk
r�YnXt	|�}~t	|�}	|�
|d�|�||�|�
|	d�|�|	|�q"WdS)	Nr(r�rrcSsg|]
}t��qSr)r#)rr�rrrr�sz2MappingTestCase.check_len_race.<locals>.<listcomp>c3s|]}�|�VqdS)Nr)rr<)rrrr�sz1MappingTestCase.check_len_race.<locals>.<genexpr>)Z
addCleanupr-r�r�rir.rrrrfZassertGreaterEqualZassertLessEqual)
rrr�thrrr r!r"r#r)rr�check_len_race�s(
zMappingTestCase.check_len_racecCs|�tjdd��dS)NcSs|dfS)Nr(r)r�rrrr��rz:MappingTestCase.test_weak_keyed_len_race.<locals>.<lambda>)r)r:r�)rrrr�test_weak_keyed_len_race�sz(MappingTestCase.test_weak_keyed_len_racecCs|�tjdd��dS)NcSsd|fS)Nr(r)r�rrrr��rz;MappingTestCase.test_weak_valued_len_race.<locals>.<lambda>)r)r:r&)rrrr�test_weak_valued_len_race�sz)MappingTestCase.test_weak_valued_len_racecCs�|��\}}x2|D]*}|�t�|�d�|�|||jd�qWt|���}t|�����}|�	�|�	�|�||d�~~|�t
|�|j�|d=|�t
|�|jdd�~~|�t
|�dd�t��}|�
t|jd�t�|d<|�
t|jd�dS)Nr(z#wrong object returned by weak dict!z/cloning of weak-valued dictionary did not work!rz/deleting object did not cause dictionary updatez0deleting the values did not clear the dictionaryrF)�make_weak_valued_dictrGr:rYrCrr�r�copy�sortrf�COUNTr&rN�KeyError�__getitem__r)r�dict�objectsr<�items1�items2rrr�test_weak_values�s.


z MappingTestCase.test_weak_valuescCs�|��\}}x8|D]0}|�t�|�dd|�|�|j||d�qW|��}|����}|�t|�t|�d�~~|�t	|�|j
�|d=|�t	|�|j
dd�~~|�t	|�dd�td�}d	||<|�||�|�
d
|�dS)Nr(z&wrong number of weak references to %r!z#wrong object returned by weak dict!z.cloning of weak-keyed dictionary did not work!rz/deleting object did not cause dictionary updatez.deleting the keys did not clear the dictionaryryz$What is the meaning of the universe?�")�make_weak_keyed_dictrGr:rYrCrrr-�setrfr/rrh�assertNotIn)rr2r3r<r4r5rrr�test_weak_keys�s,


zMappingTestCase.test_weak_keyscCs|��\}}|�|�|��}|�t|�t|��t|�}xF|D]>}|�}|�||�|�||�|�|j||�|�|�q@W|�t|�d�t|�}|�tt|����t|��xJ|��D]>}|�}|�||�|�||�|�|j||�|�|�q�W|�t|�d�dS)Nr)	r8�check_iters�keyrefsrGrfr�rhrr�)rr2r3r��objects2r=r�rrr�test_weak_keyed_iters�s*

z%MappingTestCase.test_weak_keyed_iterscCs|��\}}|�|�|��}|�t|�t|��t|�}xD|D]<}|�}|�|||j�|�|j||jj�|�|�q@W|�t|�d�t|�}|�tt|����t|��xH|��D]<}|�}|�|||j�|�|j||jj�|�|�q�W|�t|�d�dS)Nr)	r,r<�	valuerefsrGrfr�rr��
itervaluerefs)rr2r3r�r>r=r�rrr�test_weak_valued_iterss&

z&MappingTestCase.test_weak_valued_iterscCs�t|���}x|��D]}|�|�qW|�|d�t|���}x|D]}|�|�qFW|�|d�t|���}x|��D]}|�|�qzW|�|d�t|���}x|��D]}|�|�q�W|�|d�dS)Nzitems() did not touch all itemsz!__iter__() did not touch all keysz!iterkeys() did not touch all keysz%itervalues() did not touch all values)r�rr�rd�keys�values)rr2r�itemrCr�rD�vrrrr<s"
zMappingTestCase.check_iterscCslt|�}tt||���}t|�|d=t��|�tt|��t|�t|�dg�~|�t|�|d�dS)N���r()	rf�iter�getattrrr-r.rhr�rG)rr2r3Z	iter_namer�r!rrr�"check_weak_destroy_while_iterating6s$z2MappingTestCase.check_weak_destroy_while_iteratingc	Cs|��\}}|�||�WdQRX|��\}}|�t|j|�WdQRX|�||�|��\}}|�t|j|�WdQRX|�||�|��\}}|||<WdQRX|�|||�t�|�}|��\}}|�|�WdQRX|�||�|��\}}|��WdQRX|�t	|�d�dS)Nr)
r:rNr0r��poprGr-�update�clearrf)rr2�testcontextr�rFZddictrrr�-check_weak_destroy_and_mutate_while_iteratingCs$
z=MappingTestCase.check_weak_destroy_and_mutate_while_iteratingc	Csjtd�}|��Lt|�}|�t|����|�t|�|d�|||<|�t|�|�WdQRX|��6|�t|�|d�|��|�t|�|d�WdQRX|��<|�t|�|d�|t|���=|�t|�|d�WdQRX|��6|�t|�|d�|��|�t|�|d�WdQRX|��|��|�t|�d�WdQRX|�t|�d�dS)	Ni@�r(rFr_rr!rr)rrfrKrrCrG�popitemrM)rr2rNr<r�rrr�&check_weak_del_and_len_while_iterating\s.z6MappingTestCase.check_weak_del_and_len_while_iteratingcs�|��\��|���d�|���d�|���d�|���d�|��\��tj��fdd��}|��|�|��\��|��|�dS)NrCrrDr=c3sLz8t����}t|����j}t��t|�|fVWdd}t��XdS)N)rHrrrKrr-r.r)r!rF)r2r3rrrN�s
zKMappingTestCase.test_weak_keys_destroy_while_iterating.<locals>.testcontext)r8rJ�
contextlib�contextmanagerrOrQ)rrNr)r2r3r�&test_weak_keys_destroy_while_iterating}sz6MappingTestCase.test_weak_keys_destroy_while_iteratingcs�|��\��|���d�|���d�|���d�|���d�|���d�|��\��tj��fdd��}|��|�|��\��|��|�dS)NrCrrDrAr@c3sLz8t����}t|����j}t��|t|�fVWdd}t��XdS)N)rHrrrKrr-r.r)r!r�)r2r3rrrN�s
zMMappingTestCase.test_weak_values_destroy_while_iterating.<locals>.testcontext)r,rJrRrSrOrQ)rrNr)r2r3r�(test_weak_values_destroy_while_iterating�sz8MappingTestCase.test_weak_values_destroy_while_iteratingcCs*td�}t�|di�}|�||d�dS)Nr_il)rr:r�rG)rr<r2rrr�#test_make_weak_keyed_dict_from_dict�sz3MappingTestCase.test_make_weak_keyed_dict_from_dictcCs4td�}t�|di�}t�|�}|�||d�dS)Nr_il)rr:r�rG)rr<r2�dict2rrr�.test_make_weak_keyed_dict_from_weak_keyed_dict�s
z>MappingTestCase.test_make_weak_keyed_dict_from_weak_keyed_dictcCs<t��}tttt|j���}x|D]}|j||<q"W||fS)N)r:r�r��maprrir/r)rr2r3r<rrrr8�s

z$MappingTestCase.make_weak_keyed_dictcCs*td�}t�d|i�}|�|d|�dS)Nr_il)rr:r&rG)rr<r2rrr�$test_make_weak_valued_dict_from_dict�sz4MappingTestCase.test_make_weak_valued_dict_from_dictcCs4td�}t�d|i�}t�|�}|�|d|�dS)Nr_il)rr:r&rG)rr<r2rWrrr�0test_make_weak_valued_dict_from_weak_valued_dict�s
z@MappingTestCase.test_make_weak_valued_dict_from_weak_valued_dictcCs�|�ttjj�|�ttjii�|�ttjdd�td�}xBdD]:}tjf||i�}|�t|���|g�|�|||�qBWdS)Nrr_)rr2r�iterable)	rNrOr:r&rrrGr�rC)rr<�kwr�rrr�test_make_weak_valued_dict_misc�s
z/MappingTestCase.test_make_weak_valued_dict_misccCs<t��}tttt|j���}x|D]}|||j<q"W||fS)N)r:r&r�rYrrir/r)rr2r3r<rrrr,�s

z%MappingTestCase.make_weak_valued_dictc	Cs�|�}|||<|||<|�t|�d�|��\}}|�t|�d�||krX|�||�n|�||�|��\}}|�t|�d�||kr�|�||�n|�||�dS)NrFr(r)rGrfrPrC)	r�klass�key1�value1�key2�value2�weakdictr�rFrrr�
check_popitem�szMappingTestCase.check_popitemcCs|�tjdt�dt��dS)Nr`rb)rer:r&r)rrrr�test_weak_valued_dict_popitem�sz-MappingTestCase.test_weak_valued_dict_popitemcCs|�tjt�dt�d�dS)Nzvalue 1zvalue 2)rer:r�r)rrrr�test_weak_keyed_dict_popitem�sz,MappingTestCase.test_weak_keyed_dict_popitemcCs�|�||d�|�}|�||�}|�||�|�||�|�|�|�|�|�|||�|�||�}|�||�|�||�|�|�|�|�|�|||�dS)Nz9invalid test -- value parameters must be distinct objects)r��
setdefaultrCrh�get)rr_�keyrarcrdr<rrr�check_setdefault�sz MappingTestCase.check_setdefaultcCs|�tjdt�t��dS)Nrj)rkr:r&r)rrrr� test_weak_valued_dict_setdefaultsz0MappingTestCase.test_weak_valued_dict_setdefaultcCs|�tjt�dd�dS)Nzvalue 1zvalue 2)rkr:r�r)rrrr�test_weak_keyed_dict_setdefaultsz/MappingTestCase.test_weak_keyed_dict_setdefaultcCs�|�}|�|�|�t|�t|��xJ|��D]>}|�||d�|�|�}|�|||�|�||�|��q.WxH|��D]<}|�||d�||}|�|||�|�||�|��qzWdS)Nz(mysterious new key appeared in weak dictz%original key disappeared in weak dict)rLrGrfrCrhrirC)rr_r2rdr�rFrrr�check_updates

zMappingTestCase.check_updatec	Cs�|�tjdt�dt�t�t�i�|�ttjj�t��}|�t|jii�|�t|jdd�|�t|�	��g�t
d�}xJdD]B}t��}|jf||i�|�t|�	��|g�|�|||�q�WdS)Nr(r�rr_)rr2rr\)rnr:r&rrNrOrLrGr�rCr)rr�r<r]rrr�test_weak_valued_dict_update&s
z,MappingTestCase.test_weak_valued_dict_updatec	Cs$|�tjt�dt�dt�di�dS)Nr(rFr_)rnr:r�r)rrrr�test_weak_keyed_dict_update7sz+MappingTestCase.test_weak_keyed_dict_updatecCsht��}td�}td�}d||<d||<|�t|�d�||=|�t|�d�|�t|���|g�dS)N�1�2�	somethingrFr()r:r�rrGrfr�rC)rr��o1rXrrr�test_weak_keyed_delitem;sz'MappingTestCase.test_weak_keyed_delitemcCslt��}td�}td�}||d<||d<|�t|�d�|d=|�t|�d�|�t|���d|fg�dS)Nrqrrrszsomething elserFr()r:r&rrGrfr�r)rr�rtrXrrr�test_weak_valued_delitemFsz(MappingTestCase.test_weak_valued_delitemcCsft��}td�}|�t|j|�|�t|j|�|�t|jd�|�t|jd�|�t|jdd�dS)Nrq�
)	r:r�rrNr0r�r1rO�__setitem__)rr�r<rrr�test_weak_keyed_bad_delitemQsz+MappingTestCase.test_weak_keyed_bad_delitemcs�t��}d�G��fdd�dt���fdd�td�D��x�D]}|j||<q>W~t|�������d�d}x�D]}|d	7}||=qtW|�t	|�d�|�|d
�dS)NFcs*eZdZdd�Zdd�Z��fdd�ZdS)z<MappingTestCase.test_weak_keyed_cascading_deletes.<locals>.CcSs
||_dS)N)r�)rr�rrrrhszEMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__init__cSs
t|j�S)N)rr�)rrrrrjszEMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__hash__cs�r
�d=|j|jkS)NrG)r�)rr)�mutate�objsrrrlszCMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__eq__N)r	r
rrrrr)rzr{rrrgsrcsg|]}�|��qSrr)rr�)rrrrsszEMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.<listcomp>rTrr(rF)
r:r�rKrir�r�rC�reverserGrf)rr�r<�countr)rrzr{r�!test_weak_keyed_cascading_deletes_s 
	

z1MappingTestCase.test_weak_keyed_cascading_deletescCst��}|�t|�d�dS)Nz<WeakValueDictionary at 0x.*>)r:r&�assertRegexr;)rr2rrr�test_make_weak_valued_dict_repr�sz/MappingTestCase.test_make_weak_valued_dict_reprcCst��}|�t|�d�dS)Nz<WeakKeyDictionary at 0x.*>)r:r�rr;)rr2rrr�test_make_weak_keyed_dict_repr�sz.MappingTestCase.test_make_weak_keyed_dict_reprc	CsLt��}t��4x,td�D] }|�dt��}|�|d�~qWWdQRXdS)Ni��r`)r:r&r7rirhr#r�)rr�r�rrrr�$test_threaded_weak_valued_setdefault�sz4MappingTestCase.test_threaded_weak_valued_setdefaultc	CsRt��}t��:x2td�D]&}t�|d<|�dd�}|�|d�qWWdQRXdS)Ni��r`)r:r&r7rir#rKr�)rr�r�rrrr�test_threaded_weak_valued_pop�s
z-MappingTestCase.test_threaded_weak_valued_popc	CsRt��}t��:x2td�D]&}t�}||d<|�t|�d�d}qWWdQRXdS)Ni@
r`r()r:r&r7rir#rGrf)rr�r�r<rrr�%test_threaded_weak_valued_consistency�sz5MappingTestCase.test_threaded_weak_valued_consistencycs
g}Gdd�d�}Gdd�d�}�fdd�}dd�}|�|tjtjf�|�}g}	g}
xBtd	�D]6}||�||�}}
|	�|�|
�|
�|
||<~~
q`Wtj|||fd
�}|tjkr�tj||	fd
�}ntj||
fd
�}|��|��|�	�|�	�|�r|d�dS)Nc@seZdZdd�ZdS)z?MappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyKeycSs
||_dS)N)�ctr)rr�rrrr�szHMappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyKey.__init__N)r	r
rrrrrr�DummyKey�sr�c@seZdZdd�ZdS)zAMappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyValuecSs
||_dS)N)r�)rr�rrrr�szJMappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyValue.__init__N)r	r
rrrrrr�
DummyValue�sr�c
sRy �dkrt�|�}n|��}Wn,tk
rL}z|�|�Wdd}~XYnXdS)NT)r-�deepcopyr�re)r��excrZex)r�rr�	dict_copy�sz@MappingTestCase.check_threaded_weak_dict_copy.<locals>.dict_copycSsLd}xB|rFt�dt|�d�}|d7}|�|�|ddkrt��qWdS)Nrr(i')�randomZrandintrfrKr-r.)ZlstZgc_ctrr�rrr�pop_and_collect�s
zFMappingTestCase.check_threaded_weak_dict_copy.<locals>.pop_and_collectip)r1r�r)
rhr:r�r&rirer2r3r4r5)rZtype_r�r�r�r�r�r�r�rCrDr�r�rFZt_copyZ	t_collectr)r�r�check_threaded_weak_dict_copy�s4		


z-MappingTestCase.check_threaded_weak_dict_copycCs|�tjd�dS)NF)r�r:r�)rrrr� test_threaded_weak_key_dict_copy�sz0MappingTestCase.test_threaded_weak_key_dict_copycCs|�tjd�dS)NT)r�r:r�)rrrr�$test_threaded_weak_key_dict_deepcopy�sz4MappingTestCase.test_threaded_weak_key_dict_deepcopycCs|�tjd�dS)NF)r�r:r&)rrrr�"test_threaded_weak_value_dict_copy�sz2MappingTestCase.test_threaded_weak_value_dict_copycCs|�tjd�dS)NT)r�r:r&)rrrr�&test_threaded_weak_value_dict_deepcopy�sz6MappingTestCase.test_threaded_weak_value_dict_deepcopycCst��}|�|jj�dS)N)r:r&rDZ_remove�__closure__)rr�rrr�test_remove_closuresz#MappingTestCase.test_remove_closureN)5r	r
rr/r$r%r'r)r*r+r6r;r?rBr<rJrOrQrTrUrVrXr8rZr[r^r,rerfrgrkrlrmrnrorprurvryr~r�r�r�r�r�r�r�r�r�r�rr�r�rrrrrss`
!-=r)�
mapping_testsc@s6eZdZdZed�ed�ed�d�ZejZdd�Z	dS)	�WeakValueDictionaryTestCasez?Check that WeakValueDictionary conforms to the mapping protocolr(rFr_)r`rb�key3cCs
|j��S)N)�!_WeakValueDictionaryTestCase__refr-)rrrr�
_reference
sz&WeakValueDictionaryTestCase._referenceN)
r	r
r�__doc__rr�r:r&�	type2testr�rrrrr�	sr�c@s:eZdZdZed�ded�ded�diZejZdd	�Z	d
S)�WeakKeyDictionaryTestCasez=Check that WeakKeyDictionary conforms to the mapping protocolr`r(rbrFr�r_cCs
|j��S)N)�_WeakKeyDictionaryTestCase__refr-)rrrrr�sz$WeakKeyDictionaryTestCase._referenceN)
r	r
rr�rr�r:r�r�r�rrrrr�sr�c@sVeZdZGdd�d�Zdd�Zdd�Zdd�Zd	d
�Zdd�Ze	d
d��Z
dd�ZdS)�FinalizeTestCasec@seZdZdS)zFinalizeTestCase.AN)r	r
rrrrrr�sr�cCstjjdkrt��dS)NZcpython)�sys�implementation�namerr�)rrrr�_collect_if_necessarysz&FinalizeTestCase._collect_if_necessarycs��fdd�}|��}g�tj||dddd�}|�|jd�|�|��||dd	dif�|�|�d
�|�|�d�|�|�d�|�|��d�|�|��d�|�|jd�|��d
g�g�t�||ddd�}|�|��||dif�|�|��||dif�|�|�d�|�|�d�|�|��d�|�|��d�|�|jd�|��g�g�tj||dddd
�}~|��|�|�d�|�|�d�|�|��d�|�|��d�|�|jd�|��d
g�dS)Ncs��|||�|||S)N)re)rr�r�)�resrr�add#sz+FinalizeTestCase.test_finalize.<locals>.add�C�+�Y)r�T)r�r�r���F)r�r�r�)rr�r�)r�r:�finalizerG�alive�peek�detachr�)rr�r�rr)r�r�
test_finalize"sBzFinalizeTestCase.test_finalizec	s$�fdd�}|��}g�tj||ddddd�}|�|��||dddd�f�|�|��dddd�fg�g�tj||dd	�}|�|��||d
ddif�|�|��d
ddifg�g�tj||dd�}|�|��||d
ddif�|�|��d
ddifg�|�ttj|�|�ttj�dS)
Ncs��||f�dS)N)re)r��kwargs)r�rr�finLsz-FinalizeTestCase.test_arg_errors.<locals>.finr(rFr_r)�funcr�)r(rF)r�rrr)r�r�r)r�r:r�rGr�rNrO)rr�r�rr)r�r�test_arg_errorsKs&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	�|�dddddddd	g}|�	||�dS)
N�f1�f2�f3�f4�f5r��Brr�)
r�r:r�rergr�r�rdr�rG)	rr�r�r�r�r�r�r�Zexpectedrrr�
test_orderfs6



zFinalizeTestCase.test_ordercs�Gdd�dtj�}|��}g��fdd�}|||�}t�|�}t�|�}~~|�|��|�|��~|��|�|��|�|��|��dg�dS)Nc@seZdZdS)z4FinalizeTestCase.test_all_freed.<locals>.MyFinalizerN)r	r
rrrrr�MyFinalizer�sr�cs��d�dS)N�{)rer)r�rrr*�sz1FinalizeTestCase.test_all_freed.<locals>.callbackr�)r:r�r�r)rVr�rDrG)rr�r�r*rZwr_callbackZwr_fr)r�r�test_all_freed�s


zFinalizeTestCase.test_all_freedcs|�fdd�}t��tdt�}t��tdt�}t��|�}t��tdt�}|jdksVt�d|_|jdksjt�|jdksxt�dS)Ncs"t��td�}td�dddS)N�g1zf3 errorr(r)r:r��print)r�)�clsrr�error�sz,FinalizeTestCase.run_in_child.<locals>.errorr�r�r�TF)r:r�r��_global_var�atexit�AssertionError)r�r�r�r�r�r�r)r�r�run_in_child�szFinalizeTestCase.run_in_childcCsJd}t�d|�\}}}|�d���}|�|ddddg�|�d|k�dS)	NzNfrom test.test_weakref import FinalizeTestCase;FinalizeTestCase.run_in_child()z-c�asciiz	f4 foobarzf3 errorr�z	f1 foobarsZeroDivisionError)rZassert_python_ok�decode�
splitlinesrGrg)r�progZrc�out�errrrr�test_atexit�s
zFinalizeTestCase.test_atexitN)r	r
rr�r�r�r�r�r��classmethodr�r�rrrrr�s)'r�a� Doctest for examples in the library reference: weakref.rst

>>> 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
>>> 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
>>> try:
...     id2obj(a_id)
... except KeyError:
...     print('OK')
... else:
...     print('WeakValueDictionary error')
OK

�
libreftestc	Cs*t�ttttttt�t�	t
jt�dS)N)
rZrun_unittestr8rrr�r�r�r�Zrun_doctestr��modulesr	rrrr�	test_mainsr��__main__)r+)(r-r�Zunittestrbr:rvrRr-r2r,r�ZtestrZtest.supportrr�r�rrrrrr#ZTestCaser%rSr7r8r�rrr�ZBasicTestMappingProtocolr�r�r�r�Z__test__r�r	rrrr�<module>sb	(g}