o
    jg                     @   s   d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZmZ ed\ZZdd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Z dd Z!dd Z"dS )    )symbols)ccode)DeclarationVariablefloat64int64String	CodeBlock)alignofCommaOperatorgotoLabelPreDecrementPostDecrementPreIncrementPostIncrementsizeofunionstructzx yc                  C   s0   t t} t| dksJ | j| j | ksJ d S )Nz
alignof(x))r
   xr   funcargs)ax r   W/var/www/html/zoom/venv/lib/python3.10/site-packages/sympy/codegen/tests/test_cnodes.pytest_alignof   s   r   c                  C   s:   t ttdt } t| dksJ | j| j | ksJ d S )N   z(++(x), 2*x))r   r   r   r   r   r   )exprr   r   r   test_CommaOperator   s   r   c                  C   s   d} t | }|j|j |ksJ |t dksJ t|dks J t| }t|dks,J |tdks4J |tdks<J ttg}t| |}|jtdksOJ |j	t
ttksZJ t|dksbJ ttttg}t| |}|jtdksxJ |j	t
ttttksJ t|dksJ d S )N
early_exitfoobarzgoto early_exitzearly_exit:zearly_exit:
++(x);z#early_exit:
{
   ++(x);
   --(y);
})r   r   r   r   r   r   r   namer   bodyr	   r   y)sgl1r"   l2r   r   r   test_goto_Label   s&   


r(   c                  C   0   t t} | j| j | ksJ t| dksJ d S )Nz--(x))r   r   r   r   r   pr   r   r   test_PreDecrement3      r,   c                  C   r)   )Nz(x)--)r   r   r   r   r   r*   r   r   r   test_PostDecrement9   r-   r.   c                  C   r)   )Nz++(x))r   r   r   r   r   r*   r   r   r   test_PreIncrement?   r-   r/   c                  C   r)   )Nz(x)++)r   r   r   r   r   r*   r   r   r   test_PostIncrementE   r-   r0   c                  C   s^   d} t | }t|d|  ksJ |j|j |ksJ |jrJ | tdtdhks-J d S )Nzunsigned intz
sizeof(%s)r   )r   r   r   r   is_Atomatomsr   )typenameszr   r   r   test_sizeofK   s   
 r5   c                  C   s   t ttdt ttd} }td| |g}|j|j |ksJ |td| |fks)J |td|| fks4J t|jdks=J t	|j
dksFJ tdd |j
D sRJ t|dksZJ d S )Ntypevec2r   c                 s       | ]}t |tV  qd S N
isinstancer   .0argr   r   r   	<genexpr>\       ztest_struct.<locals>.<genexpr>z)struct vec2 {
   double x;
   double y;
})r   r   r   r#   r   r   r   strr!   lendeclarationsallr   )vxvyr$   r   r   r   test_structT   s   rH   c                  C   s   t ttdt ttd} }td| |g}|j|j |ksJ |td| |fks)J t|j	dks2J t
|jdks;J tdd |jD sGJ t|dksOJ d S )Nr6   dualuser   c                 s   r9   r:   r;   r=   r   r   r   r@   k   rA   ztest_union.<locals>.<genexpr>z,union dualuse {
   double x;
   int64_t y;
})r   r   r   r#   r   r   r   r   rB   r!   rC   rD   rE   r   )rF   rG   ur   r   r   
test_uniond   s   rK   N)#sympy.core.symbolr   sympy.printing.codeprinterr   sympy.codegen.astr   r   r   r   r   r	   sympy.codegen.cnodesr
   r   r   r   r   r   r   r   r   r   r   r   r#   r   r   r(   r,   r.   r/   r0   r5   rH   rK   r   r   r   r   <module>   s     4	