U
    ZÊ¹jß  ã                   @   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t‚| j| jŽ | ks,t‚d S )Nz
alignof(x))r
   Úxr   ÚAssertionErrorÚfuncÚargs)Zax© r   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sympy/codegen/tests/test_cnodes.pyÚtest_alignof   s    r   c                  C   s:   t ttƒdt ƒ} t| ƒdks"t‚| j| jŽ | ks6t‚d S )Né   z(++(x), 2*x))r   r   r   r   r   r   r   )Úexprr   r   r   Útest_CommaOperator   s    r   c                  C   s$  d} t | ƒ}|j|jŽ |ks t‚|t dƒks0t‚t|ƒdks@t‚t| ƒ}t|ƒdksXt‚|tdƒksht‚|tdƒksxt‚ttƒg}t| |ƒ}|jt	dƒksžt‚|j
tttƒƒks´t‚t|ƒdksÄt‚ttƒttƒg}t| |ƒ}|jt	dƒksðt‚|j
tttƒttƒƒk�st‚t|ƒdk�s t‚d S )NZ
early_exitZfoobarzgoto early_exitzearly_exit:zearly_exit:
++(x);z#early_exit:
{
   ++(x);
   --(y);
})r   r   r   r   r   r   r   r   Únamer   Úbodyr	   r   Úy)ÚsÚgÚl1r    Úl2r   r   r   Útest_goto_Label   s&    


r&   c                  C   s0   t tƒ} | j| jŽ | kst‚t| ƒdks,t‚d S )Nz--(x))r   r   r   r   r   r   ©Úpr   r   r   Útest_PreDecrement3   s    r)   c                  C   s0   t tƒ} | j| jŽ | kst‚t| ƒdks,t‚d S )Nz(x)--)r   r   r   r   r   r   r'   r   r   r   Útest_PostDecrement9   s    r*   c                  C   s0   t tƒ} | j| jŽ | kst‚t| ƒdks,t‚d S )Nz++(x))r   r   r   r   r   r   r'   r   r   r   Útest_PreIncrement?   s    r+   c                  C   s0   t tƒ} | j| jŽ | kst‚t| ƒdks,t‚d S )Nz(x)++)r   r   r   r   r   r   r'   r   r   r   Útest_PostIncrementE   s    r,   c                  C   s^   d} t | ƒ}t|ƒd|  ks t‚|j|jŽ |ks4t‚|jr>t‚| ¡ tdƒtdƒhksZt‚d S )Nzunsigned intz
sizeof(%s)r   )r   r   r   r   r   Zis_AtomZatomsr   )ÚtypenameÚszr   r   r   Útest_sizeofK   s    
r/   c                  C   s¸   t ttd�t ttd� } }td| |gƒ}|j|jŽ |ks<t‚|td| |fƒksRt‚|td|| fƒksht‚t|j	ƒdkszt‚t
|jƒdksŒt‚tdd„ |jD ƒƒs¤t‚t|ƒdks´t‚d S )N©ÚtypeZvec2r   c                 s   s   | ]}t |tƒV  qd S ©N©Ú
isinstancer   ©Ú.0Úargr   r   r   Ú	<genexpr>\   s     ztest_struct.<locals>.<genexpr>z)struct vec2 {
   double x;
   double y;
})r   r   r   r!   r   r   r   r   Ústrr   ÚlenÚdeclarationsÚallr   )ÚvxÚvyr"   r   r   r   Útest_structT   s    ÿr?   c                  C   s¢   t ttd�t ttd� } }td| |gƒ}|j|jŽ |ks<t‚|td| |fƒksRt‚t	|j
ƒdksdt‚t|jƒdksvt‚tdd„ |jD ƒƒsŽt‚t|ƒdksžt‚d S )Nr0   Zdualuser   c                 s   s   | ]}t |tƒV  qd S r2   r3   r5   r   r   r   r8   k   s     ztest_union.<locals>.<genexpr>z,union dualuse {
   double x;
   int64_t y;
})r   r   r   r!   r   r   r   r   r   r9   r   r:   r;   r<   r   )r=   r>   Úur   r   r   Ú
test_uniond   s    ÿrA   N)#Zsympy.core.symbolr   Zsympy.printing.codeprinterr   Zsympy.codegen.astr   r   r   r   r   r	   Zsympy.codegen.cnodesr
   r   r   r   r   r   r   r   r   r   r   r   r!   r   r   r&   r)   r*   r+   r,   r/   r?   rA   r   r   r   r   Ú<module>   s    4	