B
    '(äb  ã               @   s€   d Z ddlmZmZmZmZ ddlmZmZ ddl	m
Z
mZmZ ddlmZ ddlmZ ddlmZmZmZ G dd	„ d	eƒZd
S )z<Test cases for the constraint solver used in type inference.é    )ÚListÚUnionÚTupleÚOptional)ÚSuiteÚassert_equal)ÚSUPERTYPE_OFÚ
SUBTYPE_OFÚ
Constraint)Úsolve_constraints)ÚTypeFixture)ÚTypeÚTypeVarTypeÚ	TypeVarIdc            	   @   sü   e Zd Zddœdd„Zddœdd„Zddœdd„Zddœd	d
„Zddœdd„Zddœdd„Zddœdd„Z	ddœdd„Z
ddœdd„Zddœdd„Zddœdd„Zee ee eedeeeef f  ddœdd„Zeeedœdd„Zeeedœdd „ZdS )!Ú
SolveSuiteN)Úreturnc             C   s   t ƒ | _d S )N)r   Úfx)Úself© r   úB/home/dcms/DCMS/lib/python3.7/site-packages/mypy/test/testsolve.pyÚsetUp   s    zSolveSuite.setUpc             C   s   |   g g g ¡ d S )N)Úassert_solve)r   r   r   r   Útest_empty_input   s    zSolveSuite.test_empty_inputc             C   s‚   |   | jjjg|  | jj| jj¡g| jj| jjfg¡ |   | jjjg|  | jj| jj¡|  | jj| jj¡g| jj| jjfg¡ d S )N)r   r   ÚtÚidÚsupcÚaÚoÚb)r   r   r   r   Ú!test_simple_supertype_constraints   s    z,SolveSuite.test_simple_supertype_constraintsc             C   sr   |   | jjjg|  | jj| jj¡g| jjg¡ |   | jjjg|  | jj| jj¡|  | jj| jj¡g| jjg¡ d S )N)r   r   r   r   Úsubcr   r   )r   r   r   r   Útest_simple_subtype_constraints   s    z*SolveSuite.test_simple_subtype_constraintsc             C   sL   |   | jjjg|  | jj| jj¡|  | jj| jj¡g| jj| jjfg¡ d S )N)r   r   r   r   r   r   r    r   )r   r   r   r   Útest_both_kinds_of_constraints%   s    z)SolveSuite.test_both_kinds_of_constraintsc             C   s@   |   | jjjg|  | jj| jj¡|  | jj| jj¡gd g¡ d S )N)r   r   r   r   r   r   r    r   )r   r   r   r   Útest_unsatisfiable_constraints+   s    z)SolveSuite.test_unsatisfiable_constraintsc             C   sL   |   | jjjg|  | jj| jj¡|  | jj| jj¡g| jj| jjfg¡ d S )N)r   r   r   r   r   r   r    )r   r   r   r   Útest_exactly_specified_result2   s    z(SolveSuite.test_exactly_specified_resultc          	   C   st   |   | jjj| jjjg|  | jj| jj¡|  | jj| jj¡|  | jj| jj	¡g| jj| jj	f| jj| jj
fg¡ d S )N)r   r   r   r   Úsr   r   Úcr    r   r   )r   r   r   r   Útest_multiple_variables8   s
    z"SolveSuite.test_multiple_variablesc             C   sŽ   |   | jjjgg | jjg¡ |   | jjj| jjjgg | jj| jjg¡ |   | jjj| jjjg|  | jj| jj¡g| jj| jj| jjfg¡ d S )N)	r   r   r   r   Zuninhabitedr%   r   r   r   )r   r   r   r   Útest_no_constraints_for_var?   s    z&SolveSuite.test_no_constraints_for_varc             C   sH  |   | jjjg|  | jj| jj¡g| jj| jjfg¡ |   | jjjg|  | jj| jj¡|  | jj| jj¡g| jj| jjfg¡ |   | jjjg|  | jj| jj¡|  | jj| jj¡g| jj| jjfg¡ |   | jjjg|  | jj| jj¡g| jj| jjfg¡ |   | jjjg|  | jj| jj¡|  | jj| jj¡g| jj| jjfg¡ d S )N)r   r   r   r   r   Úanytr   r    )r   r   r   r   Ú)test_simple_constraints_with_dynamic_typeJ   s$    z4SolveSuite.test_simple_constraints_with_dynamic_typec             C   s”   |   | jjjg|  | jj| jj¡|  | jj| jj¡g| jj| jjfg¡ |   | jjjg|  | jj| jj¡|  | jj| jj¡g| jj| jjfg¡ d S )N)r   r   r   r   r   r   r    r)   )r   r   r   r   Ú)test_both_normal_and_any_types_in_resultsd   s    z4SolveSuite.test_both_normal_and_any_types_in_results)ÚvarsÚconstraintsÚresultsr   c             C   sV   g }x0|D ](}t |tƒr(| |d ¡ q
| |¡ q
W t||ƒ}tt|ƒt|ƒƒ d S )Nr   )Ú
isinstanceÚtupleÚappendr   r   Ústr)r   r,   r-   r.   ÚresÚrÚactualr   r   r   r   q   s    


zSolveSuite.assert_solve)Útype_varÚboundr   c             C   s   t |jt|ƒS )N)r
   r   r   )r   r6   r7   r   r   r   r      s    zSolveSuite.supcc             C   s   t |jt|ƒS )N)r
   r   r	   )r   r6   r7   r   r   r   r    ‚   s    zSolveSuite.subc)Ú__name__Ú
__module__Ú__qualname__r   r   r   r!   r"   r#   r$   r'   r(   r*   r+   r   r   r
   r   r   r   r   r   r   r    r   r   r   r   r      s"   		
r   N)Ú__doc__Útypingr   r   r   r   Zmypy.test.helpersr   r   Zmypy.constraintsr   r	   r
   Z
mypy.solver   Zmypy.test.typefixturer   Z
mypy.typesr   r   r   r   r   r   r   r   Ú<module>   s   