o
    fo                     @   s8   d Z ddlZddlZddlZe ZG dd dejZdS )zGbytecode_helper - support tools for testing correct bytecode generation    Nc                   @   s0   e Zd ZdZdd ZefddZefddZdS )	BytecodeTestCasez1Custom assertion methods for inspecting bytecode.c                 C   s   t  }tj||d | S )N)file)ioStringIOdisgetvalue)selfcos r   3/usr/lib/python3.10/test/support/bytecode_helper.pyget_disassembly_as_string   s   z*BytecodeTestCase.get_disassembly_as_stringc                 C   st   t |D ]}|j|kr|tu s|j|kr|  S q| |}|tu r*d||f }n	d}||||f }| | dS )zAReturns instr if opname is found, otherwise throws AssertionErrorz%s not found in bytecode:
%sz!(%s,%r) not found in bytecode:
%sN)r   get_instructionsopname_UNSPECIFIEDargvalr   failr   xr   r   instrdisassemblymsgr   r   r   assertInBytecode   s   

z!BytecodeTestCase.assertInBytecodec                 C   sn   t |D ]/}|j|kr4| |}|tu r!d||f }| | q|j|kr4d}||||f }| | qdS )z(Throws AssertionError if opname is foundz%s occurs in bytecode:
%sz(%s,%r) occurs in bytecode:
%sN)r   r   r   r   r   r   r   r   r   r   r   assertNotInBytecode   s   



z$BytecodeTestCase.assertNotInBytecodeN)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r   	   s
    r   )r   unittestr   r   objectr   TestCaser   r   r   r   r   <module>   s    