o
    €e¥  ã                   @   sv   d dl mZ d dlm  mZ d dlT d dlT d dlT G dd„ deƒZG dd„ deƒZ	e
dkr9d dlZe ¡  dS dS )	é    )Ú
CythonTestN)Ú*c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestBufferParsingc                    s   ˆ  ‡ ‡fdd„¡jS )Nc                      ó
   ˆ  ˆ ¡S ©N©Úfragment© ©ÚsÚselfr	   úPD:\Projects\ConvertPro\env\Lib\site-packages\Cython/Compiler/Tests/TestBuffer.pyÚ<lambda>   ó   
 z)TestBufferParsing.parse.<locals>.<lambda>)Zshould_not_failÚroot)r   r   r	   r
   r   Úparse   s   zTestBufferParsing.parsec                    s*   ˆ  ‡ ‡fdd„tj¡}ˆ ||j¡ d S )Nc                      r   r   r   r	   r
   r	   r   r      r   z1TestBufferParsing.not_parseable.<locals>.<lambda>)Zshould_failÚErrorsZCompileErrorÚassertEqualÚmessage_only)r   Zexpected_errorr   Úer	   r
   r   Únot_parseable   s   zTestBufferParsing.not_parseablec                 C   s<   |   d¡}|jd j}|  t|tƒ¡ |  dt|jƒ¡ d S )Nz(cdef object[float, 4, ndim=2, foo=foo] xr   é   )	r   ÚstatsÚ	base_typeÚ
assertTrueÚ
isinstanceÚTemplatedTypeNoder   ÚlenZpositional_args)r   ÚtZbufnoder	   r	   r   Ú
test_basic   s   
zTestBufferParsing.test_basicc                 C   ó   |   d¡ d S )Nz$cdef object[short unsigned int, 3] x©r   ©r   r	   r	   r   Útest_type_pos   ó   zTestBufferParsing.test_type_posc                 C   r    )Nz0cdef object[foo=foo, dtype=short unsigned int] xr!   r"   r	   r	   r   Útest_type_keyword    r$   z#TestBufferParsing.test_type_keywordc                 C   s   |   dd¡ d S )Nz%Non-keyword arg following keyword argzcdef object[foo=1, 2] x)r   r"   r	   r	   r   Útest_pos_after_key#   s   ÿz$TestBufferParsing.test_pos_after_keyN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r#   r%   r&   r	   r	   r	   r   r      s    r   c                   @   sF   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )ÚTestBufferOptionsc                 C   s   || _ |  | j¡ d S r   )Úerrorr   Úexpect_error)r   r+   r	   r	   r   Únonfatal_error.   s   z TestBufferOptions.nonfatal_errorFc                 C   s¶   |dksJ ‚d| }|| _ | j|t| ƒt| ƒgdj}|sK|jd jjd }t|tƒs-J ‚|j	}|  
t|tƒ¡ |  
t|jtƒ¡ |  d|jj¡ |S |  
t|jd jjƒdk¡ d S )NÚ zdef f():
  cdef object[%s] x©Zpipeliner   Úobject)r,   r   ÚNormalizeTreeÚ	PostParser   r   Úbodyr   ZCVarDefNoder   r   r   Zbase_type_nodeÚCSimpleBaseTypeNoder   Únamer   )r   Úoptsr,   r   r   ZvardefÚbuftyper	   r	   r   Ú
parse_opts3   s    zTestBufferOptions.parse_optsc                 C   s"   | j |dd |  || jj¡ d S )NT)r,   )r8   r   r+   r   )r   Zexpected_errr6   r	   r	   r   Ú	non_parseC   s   zTestBufferOptions.non_parsec                 C   óL   |   d¡}|  t|jtƒ¡ |  |jjdko|jjdk¡ |  d|j¡ d S )Nzunsigned short int, 3r   éÿÿÿÿé   ©	r8   r   r   Z
dtype_noder4   ÚsignedZlongnessr   Úndim©r   Úbufr	   r	   r   Z__test_basicH   ó   
zTestBufferOptions.__test_basicc                 C   r:   )Nz ndim=3, dtype=unsigned short intr   r;   r<   r=   r@   r	   r	   r   Z__test_dictN   rB   zTestBufferOptions.__test_dictc                 C   s&   |   d¡ |  td¡ |  td¡ d S )Nzint, 2zint, 'a'zint, -34)r8   r9   ZERR_BUF_NDIMr"   r	   r	   r   Z__test_ndimT   s   
zTestBufferOptions.__test_ndimc                 C   sZ   | j dt| ƒt| ƒgdj}|jd jj}|  |d jjdk¡ |  |d jjdk¡ d S )Nz„
        DEF ndim = 3
        def f():
            cdef object[int, ndim] x
            cdef object[ndim=ndim, dtype=int] y
        r/   r   r<   é   )	r   r1   r2   r   r   r3   r   r   r?   )r   r   r   r	   r	   r   Z__test_use_DEFY   s   ûûz TestBufferOptions.__test_use_DEFN)F)
r'   r(   r)   r-   r8   r9   Z_TestBufferOptions__test_basicZ_TestBufferOptions__test_dictZ_TestBufferOptions__test_ndimZ _TestBufferOptions__test_use_DEFr	   r	   r	   r   r*   +   s    
r*   Ú__main__)ZCython.TestUtilsr   ZCython.Compiler.ErrorsZCompilerr   ZCython.Compiler.NodesZ#Cython.Compiler.ParseTreeTransformsZCython.Compiler.Bufferr   r*   r'   ZunittestÚmainr	   r	   r	   r   Ú<module>   s    #<þ