B
     \                 @   s   d Z ddlmZ ddlZddlmZ ddlm	Z	m
Z
 ddlmZ ddlmZmZmZmZm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G dd deZG dd deeZG dd deeZedkre   dS )z
Tests for enum support.
    )print_functionN)jit	vectorize   )TestCase)ColorShapeShakePlanetRequestErrorc             C   s   | |k| |k| |k| |k	fS )N )abr   r   5lib/python3.7/site-packages/numba/tests/test_enums.pycompare_usecase   s    r   c             C   s
   | t jkS )N)r   red)r   r   r   r   getattr_usecase   s    r   c             C   s   | t d kS )z!Lookup enum member by string namer   )r   )r   r   r   r   getitem_usecase   s    r   c             C   s   | t jk|tjk|tjkfS )N)r	   mintr   circler   internal_error)r   r   cr   r   r   identity_usecase   s    r   c                s    fdd}|S )Nc                s   |  kS )Nr   )r   )constr   r   constant_usecase%   s    z/make_constant_usecase.<locals>.constant_usecaser   )r   r   r   )r   r   make_constant_usecase$   s    r   c             C   s   |r| S |S )Nr   )r   r   predr   r   r   return_usecase*   s    r   c             C   s"   | t jkr| t j S | tj S d S )N)r   r   	not_foundr   r   )xr   r   r   int_coerce_usecase.   s    

r    c             C   s   | t jkrt d S t jS d S )Nr   )r   r   Zdummy)r   r   r   r   vectorize_usecase6   s    
r!   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
BaseEnumTestc             C   s:   t }tdd|}x"| jD ]}| || ||  qW d S )NT)nopython)r   r   pairsassertPreciseEqual)selfpyfunccfuncargsr   r   r   test_compare?   s    zBaseEnumTest.test_comparec             C   sR   t }tdd|}x:| jD ]0}x*dD ]"}||f }| || ||  q$W qW dS )z5
        Passing and returning enum members.
        T)r#   )TFN)r   r   r$   ZassertIs)r&   r'   r(   Zpairr   r)   r   r   r   test_returnF   s    

zBaseEnumTest.test_returnc             C   s6   t dd|}x"| jD ]}| |||| qW d S )NT)r#   )r   valuesr%   )r&   r'   r(   argr   r   r   check_constant_usecaseR   s    z#BaseEnumTest.check_constant_usecasec             C   s,   |  t |  t |  t| jd  d S )Nr   )r.   r   r   r   r,   )r&   r   r   r   test_constantX   s    

zBaseEnumTest.test_constantN)__name__
__module____qualname__r*   r+   r.   r/   r   r   r   r   r"   =   s   r"   c               @   sZ   e Zd ZdZejejgZejejfejejfej	ej
fejejfejejfgZdd ZdS )TestEnumz-
    Tests for Enum classes and members.
    c             C   s:   t }tdd|}tjtjtjf}| || ||  dS )zE
        Enum with equal values should not compare identical
        T)r#   N)r   r   r   Zbluegreenr   squarer%   )r&   r'   r(   r)   r   r   r   test_identityl   s    zTestEnum.test_identityN)r0   r1   r2   __doc__r   r   r4   r,   r	   r   Zvanillar
   ZVENUSZMARSZEARTHr$   r6   r   r   r   r   r3   ^   s   



r3   c               @   sX   e Zd ZdZejejgZejejfejejfej	ej	fej
ej	fgZdd Zdd ZdS )TestIntEnumz0
    Tests for IntEnum classes and members.
    c             C   s8   t }tdd|}x dD ]}| |||| qW d S )NT)r#   )i,  i  i&  )r    r   r%   )r&   r'   r(   r-   r   r   r   test_int_coerce   s    
zTestIntEnum.test_int_coercec             C   sN   t ddt}tddddg}tjdd |D |jd}| ||| d S )	NT)r#      i  i  c             S   s   g | ]}t |qS r   )r!   ).0ir   r   r   
<listcomp>   s    z.TestIntEnum.test_vectorize.<locals>.<listcomp>)dtype)r   r!   npZarrayr>   r%   )r&   r(   r-   Zsolr   r   r   test_vectorize   s    zTestIntEnum.test_vectorizeN)r0   r1   r2   r7   r   r   r5   r,   r   r   r   r$   r9   r@   r   r   r   r   r8   v   s   


r8   __main__)!r7   Z
__future__r   Znumpyr?   Znumba.unittest_supportZunittest_supportZunittestZnumbar   r   Zsupportr   Zenum_usecasesr   r   r	   r
   r   r   r   r   r   r   r   r    r!   objectr"   r3   r8   r0   mainr   r   r   r   <module>   s&   !