a
    zem                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZmZ G dd dejZG dd dejZG dd	 d	ejZed
kre  dS )    N)support)script_helperFakePathc                   @   s  e Z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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ejd'krd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Z d:d; Z!d<d= Z"d>d? Z#d@dA Z$e%j&dBdC Z'dDdE Z(dFdG Z)dHdI Z*dJdK Z+e%j&dLdM Z,dNdO Z-dPdQ Z.e%j&dRdS Z/e%j&dTdU Z0dVdW Z1dXdY Z2dZd[ Z3e%j&d\d] Z4d^d_ Z5d`da Z6dbS )cTestSpecificsc                 C   s   t |dd d S )Nz<single>singlecompileselfsource r   '/usr/lib/python3.9/test/test_compile.pycompile_single   s    zTestSpecifics.compile_singlec                 C   s   |  t| j| d S N)assertRaisesSyntaxErrorr   r	   r   r   r   assertInvalidSingle   s    z!TestSpecifics.assertInvalidSinglec                 C   s   t ddd t ddd d S )Nhi<test>execzhir   r
   r   r   r   test_no_ending_newline   s    z$TestSpecifics.test_no_ending_newlinec                 C   s   t ddd d S )N r   r   r   r   r   r   r   
test_empty   s    zTestSpecifics.test_emptyc                 C   s4   t ddd t ddd t ddd t ddd d S )Nz
r   r   zhi
stuff
def f():
    passz(this_isreally_old_macdef f():
    passr   r   r   r   r   test_other_newlines   s    z!TestSpecifics.test_other_newlinesc                 C   sH   |  ttddd dd l}|j}t|dd | d| t|d| d S )Nz__debug__ = 1?r   r   	__debug__ZsureF)r   r   r   builtinsr   setattrassertEqual)r
   r   prevr   r   r   test_debug_assignment!   s    z#TestSpecifics.test_debug_assignmentc                 C   sX   |  ttd |  ttd |  ttd |  ttd |  ttd |  ttd d S )Nzlambda a,a:0zlambda a,a=1:0zlambda a=1,a=1:0zdef f(a, a): passzdef f(a = 0, a = 1): passdef f(a): global a; a = 1)r   r   evalr   r   r   r   r   test_argument_handling*   s    z$TestSpecifics.test_argument_handlingc                 C   s   |  ttddd d S )Nz1+*3filenamer   r   r   r   r   r   r   r   test_syntax_error3   s    zTestSpecifics.test_syntax_errorc                 C   s   |  ttddd d S )Nz	f(None=1)<string>r   r'   r   r   r   r   test_none_keyword_arg6   s    z#TestSpecifics.test_none_keyword_argc                 C   s   |  ttd d S )Nr#   r   r   r   r   r   r   r   test_duplicate_global_local9   s    z)TestSpecifics.test_duplicate_global_localc                 C   s,  G dd d}| }t  }td|| | |jd ztd|| W n tyV   Y n0 | d td|| | |jdtd	f td
|| | |jd|f td|| | |jd|f | ttd| G dd d}| }| ttd|| G dd dt	}| }td|| | |d d d S )Nc                   @   s$   e Zd Zdd Zdd Zdd ZdS )zBTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.Mc                 S   s   |dkrdS t d S Na   )KeyErrorr
   keyr   r   r   __getitem__@   s    zNTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.M.__getitem__c                 S   s   ||f| _ d S r   )resultsr
   r2   valuer   r   r   __setitem__D   s    zNTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.M.__setitem__c                 S   s   t dS )Nxyz)listr   r   r   r   keysF   s    zGTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.M.keysN)__name__
__module____qualname__r3   r7   r:   r   r   r   r   M>   s   r>   zz = a)zr/   zz = bzDid not detect a KeyErrorz	z = dir()r?   r8   zz = globals()zz = locals()c                   @   s   e Zd ZdS )zBTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.AN)r;   r<   r=   r   r   r   r   A[   s   r@   c                   @   s   e Zd Zdd ZdS )zBTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.Dc                 S   s   |dkrdS t | |S r-   )dictr3   r1   r   r   r   r3   c   s    zNTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.D.__getitem__N)r;   r<   r=   r3   r   r   r   r   Db   s   rB   r/   )
globalsr   r    r4   	NameErrorfailr9   r   	TypeErrorrA   )r
   r>   mgr@   rB   dr   r   r   )test_exec_with_general_mapping_for_locals<   s0    
z7TestSpecifics.test_exec_with_general_mapping_for_localsc                 C   s@   ddd  }i }d|fd  }t || | |d dd d S )	Nz	x = x or z-xi	  z
def f(x):
    %s
    %s
    %s
    %s
    %s
    %s
    %s
    %s
    %s
    %s
    # the expressions above have no effect, x == argument
    while x:
        x -= 1
        # EXTENDED_ARG/JUMP_ABSOLUTE here
    return x

   f   r   )r   r    )r
   ZlongexprrH   coder   r   r   test_extended_argk   s    
zTestSpecifics.test_extended_argc                 C   s   |  ttd d S )Nzdef f(a=1, b): passr+   r   r   r   r   test_argument_order   s    z!TestSpecifics.test_argument_orderc                 C   s<   |  ttd |  ttd |  ttd |  ttd d S )NZ2ez2.0e+z1e-z3-4e/21)r   r   r$   r   r   r   r   test_float_literals   s    z!TestSpecifics.test_float_literalsc                 C   s   d}t |dd d S )Nz
if 1:
    if 2:
        passr)   r   r   r
   sr   r   r   test_indentation   s    zTestSpecifics.test_indentationc                 C   sD   d dgd dg }t|dd}| |jd | |jt  d S )Nr   
   Zspamfnr   i  )joinr   r    co_firstlineno	co_lnotabbytes)r
   Zs256cor   r   r   test_leading_newlines   s    z#TestSpecifics.test_leading_newlinesc                 C   s  dD ]}|  tt| q| tdd | tdd | tdd | tdd | tdd	 | td
d | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd | tdd  | td!d" | td#d$ | td%d& | td'd( d S ))N)Z077787Z0xjz0x.Z0eZ090000000000000Z080000000000000Z000000000000009Z000000000000008Z0b42Z0BADCAFEZ0o123456789z0b1.1z0o4.2Z0b101j2Z0o153j2Z0b100e1Z0o777e1Z0777Z000777Z000000000000007Z0xff   z0777.i	  z0777.0Z8000000000000000000000000000000000000000000000000000777e0Z0777e1iZ  Z0e0r   z	0000e-012z09.5g      #@Z0777jy             H@Z000Z00j                z00.0Z0e3z090000000000000.g  聰vBz&090000000000000.0000000000000000000000Z090000000000000e0z090000000000000e-0Z090000000000000jy          聰vBz000000000000008.g       @z000000000000009.g      "@Z0b101010*   z-0b000000000010Z0o777i  z
-0o0000010i)r   r   r$   r    )r
   argr   r   r   !test_literals_with_leading_zeroes   s4    z/TestSpecifics.test_literals_with_leading_zeroesc              	   C   s   d}dd|  d}t | t|dd W d    n1 s@0    Y  t |d z | t}t|dd W d    n1 s0    Y  |j}| |jd	 | d
t	| | dt	| W d    n1 s0    Y  d S )Ni  za = 1
b = 2
c = 3z
d = 4z<long_int_pass>r      z<long_int_fail>   zExceeds the limit z Consider hexadecimal )
r   Zadjust_int_max_str_digitsr   r   r   	exceptionr    linenoassertInstr)r
   nr   Zerr_ctxexcr   r   r   test_int_literals_too_long   s    **z(TestSpecifics.test_int_literals_too_longc                 C   s   t jdkr4d}| t|d | td| d n>t jdkrhd}| t|d | td| d	 n
| d
 | tdt j d  t | tdt j d  t d S )NiZ
0xffffffffl    -l     Z0xffffffffffffffffl    l z)How many bits *does* this machine have???z%sre      )sysmaxsizer    r$   rE   assertIsInstanceint)r
   Zall_one_bitsr   r   r   test_unary_minus   s    


zTestSpecifics.test_unary_minusro   c           
      C   sH   d}d}d}d}d}d}d}d}| j jjD ]}	|	d ur*| |	t q*d S )	Nl        l     l          l       l            l         ro   l )test_32_63_bit_values__code__	co_constsrs   rt   )
r
   r.   bcrI   erL   rH   hvariabler   r   r   rv      s    z#TestSpecifics.test_32_63_bit_valuesc                 C   s(   dpd\}}|  |d |  |d d S )N)re   )r~   re   re   r~   r    )r
   ijr   r   r   test_sequence_unpacking_error   s    z+TestSpecifics.test_sequence_unpacking_errorc                 C   sB   g d}|D ]0}|d7 }|  tt|dd |  tt|dd qd S )N)zNone = 0z	None += 0z__builtins__.None = 0zdef None(): passzclass None: passz(a, None) = 0, 0zfor None in range(10): passzdef f(None): passzimport Nonezimport x as Nonezfrom x import Nonezfrom x import y as NonerU   tmpr   r   r'   )r
   Zstmtsstmtr   r   r   test_none_assignment   s
    z"TestSpecifics.test_none_assignmentc                 C   sF   g d}g d}|D ]}t |dd q|D ]}| tt |dd q*d S )N)z
import syszimport os, syszimport os as barzimport os.path as barz0from __future__ import nested_scopes, generatorsz2from __future__ import (nested_scopes,
generators)z3from __future__ import (nested_scopes,
generators,)z%from sys import stdin, stderr, stdoutz'from sys import (stdin, stderr,
stdout)z(from sys import (stdin, stderr,
stdout,)z(from sys import (stdin
, stderr, stdout)z)from sys import (stdin
, stderr, stdout,)z7from sys import stdin as si, stdout as so, stderr as sez9from sys import (stdin as si, stdout as so, stderr as se)z:from sys import (stdin as si, stdout as so, stderr as se,))zimport (os, sys)zimport (os), (sys)zimport ((os), (sys))zimport (syszimport sys)zimport (os,)zimport os As barzimport os.path a barzfrom sys import stdin As stdoutzfrom sys import stdin a stdoutzfrom (sys) import stdinz%from __future__ import (nested_scopesz%from __future__ import nested_scopes)z0from __future__ import nested_scopes,
generatorszfrom sys import (stdinzfrom sys import stdin)z%from sys import stdin, stdout,
stderrzfrom sys import stdin sizfrom sys import stdin,zfrom sys import (*)z(from sys import (stdin,, stdout, stderr)z from sys import (stdin, stdout),r   r   )r   r   r   )r
   ZsucceedrE   r   r   r   r   test_import	  s    zTestSpecifics.test_importc                 C   s.   dd }| \}}|  t|jt|j d S )Nc                  S   s   ddd} ddd}| |fS )Nre   c                 S   s   | S r   r   xr   r   r   <lambda>;      zITestSpecifics.test_for_distinct_code_objects.<locals>.f.<locals>.<lambda>rp   c                 S   s   | S r   r   r   r   r   r   r   <  r   )re   )rp   r   )f1f2r   r   r   rL   :  s    

z7TestSpecifics.test_for_distinct_code_objects.<locals>.f)assertNotEqualidrw   )r
   rL   r   r   r   r   r   test_for_distinct_code_objects8  s    
z,TestSpecifics.test_for_distinct_code_objectsc                 C   s   dd }|  |j d S )Nc                   S   s   dS )NZfoor   r   r   r   r   r   B  r   z/TestSpecifics.test_lambda_doc.<locals>.<lambda>)ZassertIsNone__doc__)r
   lr   r   r   test_lambda_docA  s    zTestSpecifics.test_lambda_docc                 C   s   d}|  tt|dd d}t|dd | t|d d}| t|d d}| t|d d	}| t|d d
}| t|d d}| t|d d}| t|d d}| t|d d S )Ns#   # -*- coding: badencoding -*-
pass
r   r   u%   # -*- coding: badencoding -*-
"Â¤"
u   Â¤u   "Â¤"
s   "¤"
   ¤s   # -*- coding: latin1 -*-
"¤"
s   # -*- coding: utf-8 -*-
"¤"
s"   # -*- coding: iso8859-15 -*-
"¤"
u   Â€u*   """\
# -*- coding: iso8859-15 -*-
Â¤"""
u!   # -*- coding: iso8859-15 -*-
Â¤s(   """\
# -*- coding: iso8859-15 -*-
¤"""
u   # -*- coding: iso8859-15 -*-
¤)r   r   r   r    r$   r
   rN   r   r   r   test_encodingE  s&    zTestSpecifics.test_encodingc                 C   s^  G dd dt }| }d|d< | |d d |d  d7  < | |d d |d= | d| d|d< | |d d |d  d7  < | |d d |d= | d| d|dd< | |dd d |dd  d7  < | |dd d |dd= | tdd| d|ddddf< | |ddddf d |ddddf  d7  < | |ddddf d |ddddf= | tddtddf| d|ddd< | |ddd d |ddd  d7  < | |ddd d |ddd= | tddd| d|ddddddf< | |ddddddf d |ddddddf  d7  < | |ddddddf d |ddddddf= | tdddtdddf| d|d< | |d d |d  d7  < | |d d |d= | t| d|d< | |d d |d  d7  < | |d d |d= | ttf| d S )	Nc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )z.TestSpecifics.test_subscripts.<locals>.str_mapc                 S   s
   i | _ d S r   )datar   r   r   r   __init__^  s    z7TestSpecifics.test_subscripts.<locals>.str_map.__init__c                 S   s   | j t| S r   r   rj   r1   r   r   r   r3   `  s    z:TestSpecifics.test_subscripts.<locals>.str_map.__getitem__c                 S   s   || j t|< d S r   r   r5   r   r   r   r7   b  s    z:TestSpecifics.test_subscripts.<locals>.str_map.__setitem__c                 S   s   | j t|= d S r   r   r1   r   r   r   __delitem__d  s    z:TestSpecifics.test_subscripts.<locals>.str_map.__delitem__c                 S   s   t || jv S r   )rj   r   r1   r   r   r   __contains__f  s    z;TestSpecifics.test_subscripts.<locals>.str_map.__contains__N)r;   r<   r=   r   r3   r7   r   r   r   r   r   r   str_map]  s
   r   re   rp   )re   re   rf   .)..)objectr    ZassertNotInsliceEllipsis)r
   r   rI   r   r   r   test_subscriptsZ  sd    
    zTestSpecifics.test_subscriptsc                 C   s0   d}|d dd tdD ; }t|dd d S )Nzdef f(%s): passz, c                 s   s   | ]}d ||f V  qdS )za%d:%dNr   .0r   r   r   r   	<genexpr>  r   z6TestSpecifics.test_annotation_limit.<locals>.<genexpr>i,  r   r   )rX   ranger   rR   r   r   r   test_annotation_limit  s    z#TestSpecifics.test_annotation_limitc                 C   sZ   G dd d}|  d|jjj |  d|jjj |  d|jjj |  d|jjj d S )Nc                   @   s   e Zd Zdd ZdS )z&TestSpecifics.test_mangling.<locals>.Ac                  S   s   d} d}dd l }dd l}d S )Nre   rp   r   )_A__mangled_modZ__package__.module)_A__mangled__not_mangled__r   __package__r   r   r   rL     s    z(TestSpecifics.test_mangling.<locals>.A.fN)r;   r<   r=   rL   r   r   r   r   r@     s   r@   r   r   r   r   )ri   rL   rw   co_varnames)r
   r@   r   r   r   test_mangling  s
    zTestSpecifics.test_manglingc           	      C   sH  t }| dr|d d }t|d}| }W d    n1 sF0    Y  ddgddgdd	gd
dg||gg}|D ]n\}}t|d| d}t|d| dtj}| t	|tj
k t|d| d}| || | |jd|  qvtdddtj}| tt|dd | ttt dd t
 }t g|_| tt|dd d S )NZpycr~   rz<assign>zx = 5z	<ifblock>zif True:
    pass
z
<forblock>z!for n in [1, 2, 3]:
    print(n)
z	<deffunc>zdef foo():
    pass
foo()
z%s1r   z%s2z%s3zprint(1)r)   z<ast>r$   )__file__lowerendswithopenreadr   _astZPyCF_ONLY_AST
assertTruetypeZModuler    co_filenamer   rF   ZIfZBoolOpbody)	r
   ZfnamerL   Z	fcontentsZsample_coderN   Zco1astZco2r   r   r   test_compile_ast  s0    &zTestSpecifics.test_compile_astc                    s:   d  fdd}| | | | i}|  |ddd d S )Nr   c                      s    d7   S )Nre   r   r   r   r   r   rL     s    z3TestSpecifics.test_dict_evaluation_order.<locals>.frp      )re   rf   r   )r
   rL   rI   r   r   r   test_dict_evaluation_order  s    z(TestSpecifics.test_dict_evaluation_orderc              	   C   s   dD ]}t d|d}| |jd qtdtdfD ]H}| t t d|d}W d    n1 sd0    Y  | |jd q4| tt dt	dd d S )N)file.py   file.pypassr   r   r   )
r   r    r   	bytearray
memoryviewZassertWarnsDeprecationWarningr   rF   r9   )r
   r&   rN   r   r   r   test_compile_filename  s    *z#TestSpecifics.test_compile_filenamec                 C   s<   d}t |dd}|jD ] }t|tjr| |j|j qd S )Nzdef f(): pass
def g(): passZmyfiler   )r   rx   
isinstancetypesCodeTypeassertIsr   )r
   rS   rz   objr   r   r   test_same_filename_used  s
    
z%TestSpecifics.test_same_filename_usedc                 C   s   |  d |  d |  d |  d |  d |  d |  d |  d |  d	 |  d
 |  d |  d |  d |  d d S )Nz1 + 2z
1 + 2z1 + 2
z1 + 2

z1 + 2		
z1 + 2		
        z1 + 2 # one plus twoz1; 2zimport sys; syszdef f():
   passzwhile False:
   passzif x:
   f(x)zif x:
   f(x)
else:
   g(x)zclass T:
   pass)r   r   r   r   r   test_single_statement  s    












z#TestSpecifics.test_single_statementc                 C   sT   |  d |  d |  d |  d |  d |  d |  d |  d d S )	Nz1
2zdef f(): passza = 13
b = 187zdel x
del yzf()
g()zf()
# blah
blah()zf()
xy # blah
blah()zx = 5 # comment
x = 6
)r   r   r   r   r   test_bad_single_statement  s    






z'TestSpecifics.test_bad_single_statementc              	   C   s   d}t  `}tj|d}t|d}|| W d    n1 sF0    Y  t|d }W d    n1 sr0    Y  | 	d|j
 d S )Ns   0000 
00000000000
 

bad.pywbr   	   Non-UTF-8tempfileTemporaryDirectoryospathrX   r   writer   Zrun_python_until_endri   errr
   srcZtmpdrW   fpresr   r   r   "test_particularly_evil_undecodable  s    
(,z0TestSpecifics.test_particularly_evil_undecodablec              	   C   s   d}t  `}tj|d}t|d}|| W d    n1 sF0    Y  t|d }W d    n1 sr0    Y  | 	d|j
 d S )Ns   # 
#
r   r   r   r   r   r   r   r   r   $test_yet_more_evil_still_undecodable  s    
(,z2TestSpecifics.test_yet_more_evil_still_undecodablec                    sT   t  d  t d  fdd}|dd |dd |dd |dd	 d S )
Nrf   g      ?c                    sl   | |  } | | |   }d| | }jt|d  | W d    n1 s^0    Y  d S )NzCompiling ({!r} + {!r} * {}))msg)r   formatr   RecursionError)prefixZrepeatedZ	expect_okbrokenZdetailsZ
fail_depthr
   Zsuccess_depthr   r   check_limit/  s    
z@TestSpecifics.test_compiler_recursion_limit.<locals>.check_limitr.   z()z.bz[0]z*a)rq   getrecursionlimitrt   )r
   r   r   r   r   test_compiler_recursion_limit#  s    		


z+TestSpecifics.test_compiler_recursion_limitc                 C   s8  |  td tddd W d    n1 s.0    Y  |  td  ttddd W d    n1 sj0    Y  ttddd dd}| t|d ttd	dd dd}| t|d ttd
dd dd}| t|d | ttd	dd d t }ttddd | | |d d d S )Nzcannot contain nullz123 <dummy>r$   s   123 re   r~      s   1234s   $23$s   ax = 123r   r/   )ZassertRaisesRegex
ValueErrorr   r   r    r$   rA   r   )r
   rN   	namespacer   r   r   test_null_terminated=  s    *.z"TestSpecifics.test_null_terminatedc                 C   s<   |j jD ]}t|t|kr q8q| d||j jf  d S )Nz unable to find constant %r in %r)rw   rx   reprrE   )r
   funcZexpectedconstr   r   r   check_constantQ  s    
zTestSpecifics.check_constantc                    s   fdd}|d  |d |d |d |d dd dd  }}  |j|j  |t  t| tt d	d d
d  }}dd }  |jjd |jjd d    tt|jjd |jjd  dd dd  }}  |j|j  |t	dh  
|d d S )Nc                    s`   i }d| | f }t || |d }|d } |j|j  ||   t| t|  d S Nzf1, f2 = lambda: %r, lambda: %rr   r   )r   r   rw   r   r    r   )r   nsrN   r   r   r   r   r   check_same_constant`  s    
z?TestSpecifics.test_merge_constants.<locals>.check_same_constantr           s   abcabcc                   S   s   dS )N.r   r   r   r   r   r   r  r   z4TestSpecifics.test_merge_constants.<locals>.<lambda>c                   S   s   dS )N
not a namer   r   r   r   r   r   x  r   c                   S   s   dS )Nr   r   r   r   r   r   r   x  r   c                 S   s   | dv S )N>   r   r   r   r   r   r   r   y  r   re   c                 S   s   | dv S N>   r   r   r   r   r   r   r     r   )r   rw   r   r   r    r   rx   nextiter	frozensetr   )r
   r   r   r   Zf3r   r   r   test_merge_constants[  s,    

z"TestSpecifics.test_merge_constantsc                 C   s(   dd }|  dtt|d j d S )Nc                   S   s   dS )Nrf   Zunreachable)RuntimeErrorr   r   r   r   unused_code_at_end  s    zcTestSpecifics.test_peephole_opt_unreachable_code_array_access_in_bounds.<locals>.unused_code_at_endRETURN_VALUEr~   )r    r9   disget_instructionsopname)r
   r   r   r   r   9test_peephole_opt_unreachable_code_array_access_in_bounds  s
    zGTestSpecifics.test_peephole_opt_unreachable_code_array_access_in_boundsc                    s
   fdd}|dd |dd |dd |dd	 |d
d dd dd  }}  |j|j  |d  |d  t| td  t| td dd dd  }}  |j|j  |tdh  |tdh  |d  |d d S )Nc                    s   i }t d| |f | |d }|d } |j|j  |j|j  ||   ||  t| t|   t| t| d S r   )r   assertIsNotrw   r   r   r    r   )Zconst1Zconst2r   r   r   r   r   r   check_different_constants  s    zJTestSpecifics.test_dont_merge_constants.<locals>.check_different_constantsr   r   g       )r   )r   r.      a)r.   )r  c                   S   s   dS )Nr_   r   r   r   r   r   r     r   z9TestSpecifics.test_dont_merge_constants.<locals>.<lambda>c                   S   s   dS )N              r   r   r   r   r   r     r   r_   r  c                 S   s   | dv S r   r   r   r   r   r   r     r   c                 S   s   | dv S )N>   r   r   r   r   r   r   r     r   )r   rw   r   r    r   r   r   )r
   r   r   r   r   r   r   test_dont_merge_constants  s$    




z'TestSpecifics.test_dont_merge_constantsc                 C   s   t dtdd d S )NZ42Ztest_compile_pathliker   )r   r   r   r   r   r   test_path_like_objects  s    z$TestSpecifics.test_path_like_objectsc                 C   s   t dd dd d S )Nzif a: b
i@ r   r   r   r   r   r   r   test_stack_overflow  s    z!TestSpecifics.test_stack_overflowc                 C   s   dd }dd }dd }dd }||||g}|D ]X}t t|}| d	t| | d
|d j | d |d j | d|d j q0d S )Nc                   S   s   d S r   r   r   r   r   r   unused_block_if  s    zPTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_ifc                   S   s   d S r   r   r   r   r   r   unused_block_while  s    zSTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_whilec                   S   s   d S r   r   r   r   r   r   unused_block_if_else  s    zUTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_if_elsec                   S   s   d S )Nr`   r   r   r   r   r   unused_block_while_else  s    zXTestSpecifics.test_dead_blocks_do_not_generate_bytecode.<locals>.unused_block_while_elserp   
LOAD_CONSTr   r   re   r9   r   r   r    lenr   Zargval)r
   r  r  r  r	  funcsr   opcodesr   r   r   )test_dead_blocks_do_not_generate_bytecode  s    z7TestSpecifics.test_dead_blocks_do_not_generate_bytecodec                 C   sz   dd }dd }||g}|D ]X}t t|}| dt| | d|d j | d |d j | d|d	 j qd S )
Nc                   S   s   d S r   r   r   r   r   r   break_in_while  s    z;TestSpecifics.test_false_while_loop.<locals>.break_in_whilec                   S   s   d S r   r   r   r   r   r   continue_in_while  s    z>TestSpecifics.test_false_while_loop.<locals>.continue_in_whilerp   r
  r   r   re   r  )r
   r  r  r  r   r  r   r   r   test_false_while_loop  s    z#TestSpecifics.test_false_while_loopc                 C   s<   d}dd dd t|D  d }| tt|| d S )Ni   {,c                 s   s   | ]}| d | V  qdS ):Nr   )r   r   r   r   r   r     r   z6TestSpecifics.test_big_dict_literal.<locals>.<genexpr>})rX   r   r    r  r$   )r
   Z	dict_sizeZthe_dictr   r   r   test_big_dict_literal  s     z#TestSpecifics.test_big_dict_literalN)7r;   r<   r=   r   r   r   r   r   r"   r%   r(   r*   r,   rJ   rO   rP   rQ   rT   r]   rc   rm   ru   rq   rr   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   Zcpython_onlyr   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r   r   r   r   r      sl   		/!
/	H#







.
(
r   c                   @   sP   e Zd Z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 )TestExpressionStackSized   c                 C   s>   t |trt|dd}ttt|j}| |j	| d S )Nz<foo>r   )
r   rj   r   mathceillogr  co_codeZassertLessEqualco_stacksize)r
   rN   max_sizer   r   r   check_stack_size  s    
z(TestExpressionStackSize.check_stack_sizec                 C   s   |  d| j d  d S )Nzx and r   r   Nr   r   r   r   test_and  s    z TestExpressionStackSize.test_andc                 C   s   |  d| j d  d S )Nzx or r   r!  r   r   r   r   test_or  s    zTestExpressionStackSize.test_orc                 C   s   |  d| j d  d S )Nzx and x or r   r!  r   r   r   r   test_and_or  s    z#TestExpressionStackSize.test_and_orc                 C   s   |  d| j d  d S )Nzx < r   r!  r   r   r   r   test_chained_comparison  s    z/TestExpressionStackSize.test_chained_comparisonc                 C   s   |  d| j d  d S )Nzx if x else r   r!  r   r   r   r   test_if_else"  s    z$TestExpressionStackSize.test_if_elsec                 C   s   |  d| j d  d S )Nzx + r   r!  r   r   r   r   
test_binop%  s    z"TestExpressionStackSize.test_binopc                 C   s    d}|d| j  7 }| | d S )Nz
def f(x):
z   x and x
)r"  r   r   r   r   r   test_func_and(  s    z%TestExpressionStackSize.test_func_andN)r;   r<   r=   r"  r   r#  r$  r%  r&  r'  r(  r)  r   r   r   r   r    s   r  c                   @   s   e Zd Zd5d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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*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4S )6TestStackSizeStabilityFc                    s|    fddfddt ddD }tt|dkrxdd l}dd l}| }|jd|d	 | d
|| f  d S )Nc                    s>   i }d|   } rd| }t |dd}t||| |d jS )Nzdef func():
zasync z<script>r   r   )r   r   rw   )r   r   ZscriptrN   )async_snippetr   r   compile_snippet3  s    z@TestStackSizeStability.check_stack_size.<locals>.compile_snippetc                    s   g | ]} |j qS r   )r  r   )r-  r   r   
<listcomp><  r   z;TestStackSizeStability.check_stack_size.<locals>.<listcomp>rp   rM   re   r   )filez<stack sizes diverge with # of consecutive snippets: %s
%s
%s)r   r  setr   ioStringIOrE   getvalue)r
   r,  r+  Zsizesr   r1  outr   )r+  r-  r,  r   r   2  s    	z'TestStackSizeStability.check_stack_sizec                 C   s   d}|  | d S )Nz1
            if x:
                a
            r   r
   r,  r   r   r   test_ifD  s    zTestStackSizeStability.test_ifc                 C   s   d}|  | d S )Nz{
            if x:
                a
            elif y:
                b
            else:
                c
            r5  r6  r   r   r   r'  K  s    z#TestStackSizeStability.test_if_elsec                 C   s   d}|  | d S )NzV
            try:
                a
            except:
                b
            r5  r6  r   r   r   test_try_except_bareV  s    z+TestStackSizeStability.test_try_except_barec                 C   s   d}|  | d S )Nz
            try:
                a
            except ImportError:
                b
            except:
                c
            else:
                d
            r5  r6  r   r   r   test_try_except_qualified_  s    
z0TestStackSizeStability.test_try_except_qualifiedc                 C   s   d}|  | d S )Nz
            try:
                a
            except ImportError as e:
                b
            except:
                c
            else:
                d
            r5  r6  r   r   r   test_try_except_asl  s    
z)TestStackSizeStability.test_try_except_asc                 C   s   d}|  | d S )Nzg
                try:
                    a
                finally:
                    b
            r5  r6  r   r   r   test_try_finallyy  s    z'TestStackSizeStability.test_try_finallyc                 C   s   d}|  | d S )Nz8
            with x as y:
                a
            r5  r6  r   r   r   	test_with  s    z TestStackSizeStability.test_withc                 C   s   d}|  | d S )NzX
            while x:
                a
            else:
                b
            r5  r6  r   r   r   test_while_else  s    z&TestStackSizeStability.test_while_elsec                 C   s   d}|  | d S )Nz7
            for x in y:
                a
            r5  r6  r   r   r   test_for  s    zTestStackSizeStability.test_forc                 C   s   d}|  | d S )Nz[
            for x in y:
                a
            else:
                b
            r5  r6  r   r   r   test_for_else  s    z$TestStackSizeStability.test_for_elsec                 C   s   d}|  | d S )Nz
            for x in y:
                if z:
                    break
                elif u:
                    continue
                else:
                    a
            else:
                b
            r5  r6  r   r   r   test_for_break_continue  s    z.TestStackSizeStability.test_for_break_continuec                 C   s   d}|  | d S )Na6  
            for x in y:
                try:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
                finally:
                    f
            else:
                b
            r5  r6  r   r   r   0test_for_break_continue_inside_try_finally_block  s    zGTestStackSizeStability.test_for_break_continue_inside_try_finally_blockc                 C   s   d}|  | d S )Na6  
            for x in y:
                try:
                    t
                finally:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            r5  r6  r   r   r   ,test_for_break_continue_inside_finally_block  s    zCTestStackSizeStability.test_for_break_continue_inside_finally_blockc                 C   s   d}|  | d S )Na5  
            for x in y:
                try:
                    t
                except:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            r5  r6  r   r   r   +test_for_break_continue_inside_except_block  s    zBTestStackSizeStability.test_for_break_continue_inside_except_blockc                 C   s   d}|  | d S )Na
  
            for x in y:
                with c:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            r5  r6  r   r   r   )test_for_break_continue_inside_with_block  s    z@TestStackSizeStability.test_for_break_continue_inside_with_blockc                 C   s   d}|  | d S )Nz
            try:
                if z:
                    return
                else:
                    a
            finally:
                f
            r5  r6  r   r   r   $test_return_inside_try_finally_block  s    	z;TestStackSizeStability.test_return_inside_try_finally_blockc                 C   s   d}|  | d S )Nz
            try:
                t
            finally:
                if z:
                    return
                else:
                    a
            r5  r6  r   r   r    test_return_inside_finally_block  s    	z7TestStackSizeStability.test_return_inside_finally_blockc                 C   s   d}|  | d S )Nz
            try:
                t
            except:
                if z:
                    return
                else:
                    a
            r5  r6  r   r   r   test_return_inside_except_block
  s    	z6TestStackSizeStability.test_return_inside_except_blockc                 C   s   d}|  | d S )Nz~
            with c:
                if z:
                    return
                else:
                    a
            r5  r6  r   r   r   test_return_inside_with_block  s    z4TestStackSizeStability.test_return_inside_with_blockc                 C   s   d}| j |dd d S )Nz>
            async with x as y:
                a
            Tr+  r5  r6  r   r   r   test_async_with   s    z&TestStackSizeStability.test_async_withc                 C   s   d}| j |dd d S )Nz=
            async for x in y:
                a
            TrI  r5  r6  r   r   r   test_async_for'  s    z%TestStackSizeStability.test_async_forc                 C   s   d}| j |dd d S )Nza
            async for x in y:
                a
            else:
                b
            TrI  r5  r6  r   r   r   test_async_for_else.  s    z*TestStackSizeStability.test_async_for_elsec                 C   s   d}| j |dd d S )Na  
            for x in y:
                async with c:
                    if z:
                        break
                    elif u:
                        continue
                    else:
                        a
            else:
                b
            TrI  r5  r6  r   r   r   /test_for_break_continue_inside_async_with_block7  s    zFTestStackSizeStability.test_for_break_continue_inside_async_with_blockc                 C   s   d}| j |dd d S )Nz
            async with c:
                if z:
                    return
                else:
                    a
            TrI  r5  r6  r   r   r   #test_return_inside_async_with_blockF  s    z:TestStackSizeStability.test_return_inside_async_with_blockN)F)r;   r<   r=   r   r7  r'  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rJ  rK  rL  rM  rN  r   r   r   r   r*  .  s2   
				
	r*  __main__)r   r  r   Zunittestrq   r   r   r   testr   Ztest.supportr   r   ZTestCaser   r  r*  r;   mainr   r   r   r   <module>   s,         &  %