a
    ze#                     @   sV   d dl Z d dlmZ d dlZedZd dlmZ G dd dejZedkrRe	  dS )    N)import_module_opcode)stack_effectc                   @   s   e Zd Zdd Zdd ZdS )OpcodeTestsc              	   C   s  |  ttjd d |  ttjd d |  ttjd dd |  ttjd dd |  ttjd dd	 | ttd
 | tttjd  | tttjd d tj D ]r\}}| j|dL |tjk rt| | tt|d nt|d | tt| W d    q1 s0    Y  qt	t
dt	tj  D ]R}| j|d. | tt| | tt|d W d    n1 s0    Y  qDd S )NZPOP_TOPZDUP_TOP_TWO   ZBUILD_SLICEr         i0u  opname   )Zopcode)assertEqualr   disopmapZassertRaises
ValueErroritemssubTestHAVE_ARGUMENTsetrangevalues)selfnamecode r   '/usr/lib/python3.9/test/test__opcode.pytest_stack_effect   s&    

0zOpcodeTests.test_stack_effectc           
   	   C   s  t jd }| t|dd | t|dddd | t|dddd t jd }| t|dd | t|dddd | t|dddd t jd	 }| t|dd | t|dddd | t|dddd t jt j }t j D ]\}}| j|d
 |t jk r2t|}t|dd}t|dd}	n&t|d}t|ddd}t|ddd}	||v rv| |t	||	 n| || | |	| W d    q1 s0    Y  qd S )NJUMP_IF_TRUE_OR_POPr   T)jumpFr   FOR_ITERr   JUMP_FORWARDr   )
r   r   r   r   ZhasjabsZhasjrelr   r   r   max)
r   r   r    r!   Zhas_jumpr   r   commonr   Znojumpr   r   r   test_stack_effect_jump#   s4    




z"OpcodeTests.test_stack_effect_jumpN)__name__
__module____qualname__r   r$   r   r   r   r   r   	   s   r   __main__)
r   Ztest.supportr   Zunittestr   r   ZTestCaser   r%   mainr   r   r   r   <module>   s   :