U
    ?h                     @   sz   d dl Z d dlZd dlmZ d dlmZmZmZ d dl	m
Z
 edG dd dejZG dd	 d	eZed
krve  dS )    N)cuda)unittestskip_on_cudasimCUDATestCase)irz,This is testing CUDA backend code generationc                   @   s   e Zd Zdd ZdS )TestConstStringCodegenc                 C   sb  ddl m} ddlm} |j}|d}d}|||}||| tdt	|}| 
t|d ttd g }t||d	}	t|	 }
|
|ttdd
}|
| tdt	|}| 
t|d t||d}	t|	 }
||
|}|
| tdt	|}| 
t|d |t	|d}ttd|}| 
t|d d S )Nr   )cuda_target)llvm_to_ptx zA Little Brown Foxz7@\"__conststring__.*internal.*constant.*\[19\s+x\s+i8\]      Ztest_insert_const_stringZgenericZ"test_insert_string_const_addrspaceasciiz\.const.*__conststring__)Znumba.cuda.descriptorr   Znumba.cuda.cudadrv.nvvmr	   Ztarget_contextcreate_moduleZinsert_const_stringrefindallstrZassertEquallenr   FunctionTypeZIntTypeZ
as_pointerFunctionZ	IRBuilderZappend_basic_blockZaddrspacecastZPointerTyperetZinsert_string_const_addrspacedecodelist)selfr   r	   Z	targetctxmodZ
textstringZgv0resZfntyfnZbuildermatchesptx r   [/var/www/html/venv/lib/python3.8/site-packages/numba/cuda/tests/cudapy/test_const_string.pytest_const_string
   sB    


z(TestConstStringCodegen.test_const_stringN)__name__
__module____qualname__r    r   r   r   r   r      s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestConstStringc                 C   sd   t jdd }d}tj|d dd}|d|f | t|}d|d d< d	|d< tj|| d S )
Nc                 S   s"   t d}|t| k rd| |< d S )Nr   XYZr   gridr   arrir   r   r   
str_assign<   s    
zDTestConstString.test_assign_const_unicode_string.<locals>.str_assignr   r   <U12dtyper%   r
   r   jitnpzerosZ
zeros_liketestingZassert_equal)r   r+   	n_stringsr)   expectedr   r   r    test_assign_const_unicode_string;   s    

z0TestConstString.test_assign_const_unicode_stringc                 C   sd   t jdd }d}tj|d dd}|d|f | t|}d|d d< d	|d< tj|| d S )
Nc                 S   s"   t d}|t| k rd| |< d S )Nr      XYZr&   r(   r   r   r   bytes_assignN   s    
zCTestConstString.test_assign_const_byte_string.<locals>.bytes_assignr   r   S12r-   r8   r/       r0   )r   r9   r5   r)   r6   r   r   r   test_assign_const_byte_stringM   s    

z-TestConstString.test_assign_const_byte_stringc                 C   sh   t jdd }tdtjfdtdfg}td|}|d | tjdd	g|d
}tj|| d S )Nc                 S   s4   d| d d< d| d d< d| d d< d| d d< d S )Nr   r   xABCy   r%   r   ar   r   r   f`   s    z=TestConstString.test_assign_const_string_in_record.<locals>.fr=   r?   r,   r@   r   r   )r   r>   )r@   r%   r-   )	r   r1   r2   r.   Zint32r3   asarrayr4   assert_array_equalr   rC   dtrB   	referencer   r   r   "test_assign_const_string_in_record_   s    
z2TestConstString.test_assign_const_string_in_recordc                 C   sh   t jdd }tdtjfdtdfg}td|}|d | tjdd	g|d
}tj|| d S )Nc                 S   s4   d| d d< d| d d< d| d d< d| d d< d S )Nr   r   r=      ABCr?   r@   r8   r   rA   r   r   r   rC   p   s    z<TestConstString.test_assign_const_bytes_in_record.<locals>.fr=   r?   r:   r@   rD   )r   rK   )r@   r8   r-   )	r   r1   r2   r.   Zfloat32r3   rE   r4   rF   rG   r   r   r   !test_assign_const_bytes_in_recordo   s    
z1TestConstString.test_assign_const_bytes_in_recordN)r!   r"   r#   r7   r<   rJ   rL   r   r   r   r   r$   :   s   r$   __main__)r   numpyr2   Znumbar   Znumba.cuda.testingr   r   r   Zllvmliter   ZTestCaser   r$   r!   mainr   r   r   r   <module>   s   1F