U
    ,‰d›  ã                   @   sP   d Z ddlZddlmZmZ ddlmZmZ G dd„ deƒZ	e
dkrLe ¡  dS )z
Test basic language features

é    N)ÚcudaÚfloat64)ÚunittestÚCUDATestCasec                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestLangc                    sL   d‰ t  d¡‡ fdd„ƒ}t tˆ ƒ¡}|d |ƒ |  t |ˆ k¡¡ d S )N)ç      ð?g      @g      @úvoid(float64[:])c                    s   t ˆ ƒD ]\}}|| |< qd S )N)Ú	enumerate)ÚaÚiÚv©Útup© úE/tmp/pip-unpacked-wheel-eu7e0c37/numba/cuda/tests/cudapy/test_lang.pyÚfoo   s    z$TestLang.test_enumerate.<locals>.foo©é   r   )r   ÚjitÚnpÚzerosÚlenÚ
assertTrueÚall)Úselfr   r
   r   r   r   Útest_enumerate   s    zTestLang.test_enumeratec                    sj   d‰ d‰t  d¡‡ ‡fdd„ƒ}t d¡}|d |ƒ t ˆ ¡}t ˆ¡}|  t |||  ¡ k¡¡ d S )N)r   é   é   )g      @gffffff@gÍÌÌÌÌÌ@r   c                    s0   d}t ˆ ˆƒD ]\}}||| 7 }q|| d< d S )Nr   )Úzip)r
   Úcr   Új©Út1Út2r   r   r      s    zTestLang.test_zip.<locals>.foor   r   )r   r   r   r   Úarrayr   r   Úsum)r   r   r
   Úbr   r   r!   r   Útest_zip   s    


zTestLang.test_zipc                 C   s,   t  d¡dd„ ƒ}t d¡}|d |ƒ dS )a?  
        Ensure that typing and lowering of CUDA kernel API primitives works in
        more than one block. Was originally to ensure that macro expansion works
        for more than one block (issue #872), but macro expansion has been
        replaced by a "proper" implementation of all kernel API functions.
        zvoid(float64[:,:])c                 S   s^   t dƒD ]}tjj}qt dƒD ]}tjj}qtj dt¡}d|||f< |||f | ||f< d S )Nr   r   ©r   r   r   )Úranger   Z	threadIdxÚxÚyZsharedr$   r   )Zaryr   Ztxr    ÚtyÚsmr   r   r   Ú"cuda_kernel_api_in_multiple_blocks1   s    

zCTestLang.test_issue_872.<locals>.cuda_kernel_api_in_multiple_blocksr(   )r   r(   N)r   r   r   r   )r   r.   r
   r   r   r   Útest_issue_872)   s    
	
zTestLang.test_issue_872N)Ú__name__Ú
__module__Ú__qualname__r   r'   r/   r   r   r   r   r      s   r   Ú__main__)Ú__doc__Znumpyr   Znumbar   r   Znumba.cuda.testingr   r   r   r0   Úmainr   r   r   r   Ú<module>   s   4