B
    ž†\  ã               @   sr   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rnd dlZe ¡  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
   ˆ  ˆ ¡S )N)Úfragment© )ÚsÚselfr   ú?lib/python3.7/site-packages/Cython/Compiler/Tests/TestBuffer.pyÚ<lambda>   s    z)TestBufferParsing.parse.<locals>.<lambda>)Zshould_not_failÚroot)r   r   r   )r   r   r	   Úparse   s    zTestBufferParsing.parsec                s*   ˆ  ‡ ‡fdd„tj¡}ˆ ||j¡ d S )Nc                  s
   ˆ  ˆ ¡S )N)r   r   )r   r   r   r	   r
      s    z1TestBufferParsing.not_parseable.<locals>.<lambda>)Zshould_failÚErrorsZCompileErrorÚassertEqualÚmessage_only)r   Zexpected_errorr   Úer   )r   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Úassert_Ú
isinstanceÚTemplatedTypeNoder   ÚlenZpositional_args)r   ÚtZbufnoder   r   r	   Ú
test_basic   s    
zTestBufferParsing.test_basicc             C   s   |   d¡ d S )Nz$cdef object[short unsigned int, 3] x)r   )r   r   r   r	   Útest_type_pos   s    zTestBufferParsing.test_type_posc             C   s   |   d¡ d S )Nz0cdef object[foo=foo, dtype=short unsigned int] x)r   )r   r   r   r	   Útest_type_keyword    s    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 )N)Úerrorr   Úexpect_error)r   r"   r   r   r	   Únonfatal_error.   s    z TestBufferOptions.nonfatal_errorFc             C   s¶   |dkst ‚d| }|| _| j|t| ƒt| ƒgdj}|s–|jd jjd }t|t	ƒsZt ‚|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)Úpipeliner   Úobject)ÚAssertionErrorr#   r   ÚNormalizeTreeÚ	PostParser   r   Úbodyr   ZCVarDefNoder   r   r   Zbase_type_nodeÚCSimpleBaseTypeNoder   Únamer   )r   Úoptsr#   r   r   ZvardefZbuftyper   r   r	   Ú
parse_opts3   s    zTestBufferOptions.parse_optsc             C   s"   | j |dd |  || jj¡ d S )NT)r#   )r/   r   r"   r   )r   Zexpected_errr.   r   r   r	   Ú	non_parseC   s    zTestBufferOptions.non_parsec             C   sL   |   d¡}|  t|jtƒ¡ |  |jjdko6|jjdk¡ |  d|j¡ d S )Nzunsigned short int, 3r   éÿÿÿÿé   )	r/   r   r   Ú
dtype_noder,   ÚsignedÚlongnessr   Úndim)r   Úbufr   r   r	   Z__test_basicH   s    
zTestBufferOptions.__test_basicc             C   sL   |   d¡}|  t|jtƒ¡ |  |jjdko6|jjdk¡ |  d|j¡ d S )Nz ndim=3, dtype=unsigned short intr   r1   r2   )	r/   r   r   r3   r,   r4   r5   r   r6   )r   r7   r   r   r	   Z__test_dictN   s    
zTestBufferOptions.__test_dictc             C   s&   |   d¡ |  td¡ |  td¡ d S )Nzint, 2zint, 'a'zint, -34)r/   r0   ZERR_BUF_NDIM)r   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   r2   é   )	r   r)   r*   r   r   r+   r   r   r6   )r   r   r   r   r   r	   Z__test_use_DEFY   s
    z TestBufferOptions.__test_use_DEFN)F)
r   r   r    r$   r/   r0   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   #;