o
    ¯N iŒ  ã                   @   sB   d dl Z d dlmZ d dlmZmZmZmZ G dd„ de jƒZ	dS )é    N)ÚShadow)ÚOptionsÚCythonScopeÚ
PyrexTypesÚErrorsc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú
TestShadowc           	      C   sØ   g }g }t j ¡ D ]T}| d¡^}}t j |¡}|r1t|ƒdkr1|d dkr1tt|ƒr0| 	|¡ q	|dkr6q	tt|ƒsA| 	|¡ q	|r]t
t|ƒ}|D ]}tt|ƒdƒsZtt|ƒdƒr\ nqJq	|  |g ¡ |  |g ¡ d S )NÚ.é   r   ÚmoduleÚstaticmethodÚ__getattr__Ú__getattribute__)r   Údirective_typesÚkeysÚsplitÚdirective_scopesÚgetÚlenÚhasattrr   ÚappendÚgetattrÚtypeÚassertEqual)	ÚselfÚmissing_directivesÚextra_directivesÚfull_directiveÚ	directiveÚrestÚscopeÚdirective_valueÚsubdirective© r"   úK/home/ubuntu/.local/lib/python3.10/site-packages/Cython/Tests/TestShadow.pyÚtest_all_directives_in_shadow   s0   



ÿý€z(TestShadow.test_all_directives_in_shadowc                 C   sb   t  d ¡}g }|j ¡ D ]}| d¡r| d¡rq|dv rqtt|ƒs(| |¡ q|  	|g ¡ d S )NÚ__)ÚPyTypeObjectÚPyObject_TypeCheck)
r   Úcreate_cython_scopeÚentriesr   Ú
startswithÚendswithr   r   r   r   )r   Úcython_scopeÚmissing_typesÚkeyr"   r"   r#   Útest_all_types_in_shadow$   s   


€z#TestShadow.test_all_types_in_shadowc                 C   s´   g }t jD ]L}dD ]G}|| }|r,|dv s|dkr,|  |tt ƒ¡ |  d| tt ƒ¡ q	tt |ƒs6| |¡ tddƒD ]}d| d | }tt |ƒsO| |¡ q;q	q|  |g ¡ d S )	N)Ú ÚuÚs)Ú
Py_UNICODEÚPy_UCS4Ú
Py_ssize_tÚssize_tÚ	ptrdiff_tÚ	Py_hash_tÚusize_tÚp_r	   é   ÚpÚ_)r   Ú	int_typesÚassertNotInÚdirr   r   Úranger   )r   r-   Úint_nameÚsignÚnameÚptrÚptr_namer"   r"   r#   Útest_int_types_in_shadow6   s(   




€ýðz#TestShadow.test_int_types_in_shadowc                 C   sÞ   t  d ¡}G dd„ dƒ}||_t ¡  g }g }tj ¡ D ]D\\}}}}|dkr(qtt	|ƒs2| 
|¡ | |¡s<| 
|¡ tddƒD ]}	d|	 d | }
tt	|
ƒsU| 
|
¡ | |
¡s_| 
|
¡ qAq|  |g ¡ |  |g ¡ d S )Nc                   @   s   e Zd ZdZdZg ZdS )z+TestShadow.test_most_types.<locals>.ContextFé   N)Ú__name__Ú
__module__Ú__qualname__ÚcppÚlanguage_levelÚfuture_directivesr"   r"   r"   r#   ÚContextU   s    rO   Úobjectr	   r;   r<   r=   )r   r(   Ú_contextr   Úinit_threadr   Úmodifiers_and_name_to_typeÚitemsr   r   r   Úlookup_typerA   r   )r   r,   rO   r-   Úmissing_lookupsÚsignedÚlongnessrD   Útype_rE   rF   r"   r"   r#   Útest_most_typesO   s.   








€ûzTestShadow.test_most_typesN)rI   rJ   rK   r$   r/   rG   rZ   r"   r"   r"   r#   r      s
    r   )
ÚunittestÚCythonr   ÚCython.Compilerr   r   r   r   ÚTestCaser   r"   r"   r"   r#   Ú<module>   s    