o
    2³cÕ  ã                   @   sN   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZG dd„ de jƒZdS )é    Nc                   @   s>   e Zd Zdd„ Zdd„ Zejrdd„ Zdd„ Zd	d
„ Z	dS dS )ÚArgRefcountTestsc                 C   sJ   d}t  |¡}t dd„ ¡}tdƒD ]}|j|Ž  q|  t  |¡|¡ d S )N)ÚaÚbÚcc                  W   s   t  ¡ jj| Ž S ©N©ÚgreenletÚ
getcurrentÚparentÚswitch)Úargs© r   úO/var/www/html/gps/gps/lib/python3.10/site-packages/greenlet/tests/test_leaks.pyÚ<lambda>   s    z0ArgRefcountTests.test_arg_refs.<locals>.<lambda>éd   )ÚsysÚgetrefcountr   Úranger   ÚassertEqual)Úselfr   Úrefcount_beforeÚgÚir   r   r   Útest_arg_refs   s   
ÿzArgRefcountTests.test_arg_refsc                 C   sF   i }t   dd„ ¡}tdƒD ]
}|jdi |¤Ž q|  t |¡d¡ d S )Nc                  [   s   t  ¡ jjdi | ¤ŽS )Nr   r   )Úkwargsr   r   r   r      s    z2ArgRefcountTests.test_kwarg_refs.<locals>.<lambda>r   é   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   Útest_kwarg_refs   s   ÿz ArgRefcountTests.test_kwarg_refsc                 C   s2   dd„ }t j|d}| ¡  t d¡ | ¡  d S )Nc                   S   s   t  d¡ d S )Nçü©ñÒMbP?)ÚtimeÚsleepr   r   r   r   Úworker'   s   z0ArgRefcountTests.recycle_threads.<locals>.worker©Útargetr   )Ú	threadingÚThreadÚstartr   r   Újoin)r   r    Útr   r   r   Úrecycle_threads    s
   
z ArgRefcountTests.recycle_threadsc                    ó‚   g ‰ ‡ fdd„}t dƒD ]}tj|d}| ¡  | ¡  ~qt ¡  |  ¡  t ¡  t 	¡  t ¡  ˆ D ]
}|  
|ƒ d u ¡ q4d S )Nc                      s   ˆ   t t ¡ ¡¡ d S r   )ÚappendÚweakrefÚrefr   r	   r   ©Úggr   r   r    0   s   z3ArgRefcountTests.test_threaded_leak.<locals>.workerr   r!   ©r   r#   r$   r%   r&   r   r	   r(   ÚgcÚcollectÚ
assertTrue©r   r    r   r'   r   r   r-   r   Útest_threaded_leak.   s   ÿz#ArgRefcountTests.test_threaded_leakc                    r)   )Nc                     sN   g  ‰ t  ¡ _‡ fdd„} tdƒD ]	}t   | ¡ ¡  qˆ t t  ¡ ¡¡ d S )Nc                      s   ˆ   t ¡ ¡ d S r   )r*   r   r	   r   ©Úllr   r   Ú
additionalE   s   zKArgRefcountTests.test_threaded_adv_leak.<locals>.worker.<locals>.additionalr   )r   r	   r6   r   r   r*   r+   r,   )r7   r   r-   r5   r   r    B   s
   z7ArgRefcountTests.test_threaded_adv_leak.<locals>.workerr   r!   r/   r3   r   r-   r   Útest_threaded_adv_leak@   s   ÿz'ArgRefcountTests.test_threaded_adv_leakN)
Ú__name__Ú
__module__Ú__qualname__r   r   r   ÚGREENLET_USE_GCr(   r4   r8   r   r   r   r   r      s    	Ýr   )	Úunittestr   r0   r   r+   r   r#   ÚTestCaser   r   r   r   r   Ú<module>   s    