B
    18\                 @   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ejd%krd&d' Zd(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#e$j%d@dA Z&dBdC Z'dDdE Z(dFdG Z)dHdI Z*e$j%dJdK Z+dLdM Z,dNdO Z-e$j%dPdQ Z.e$j%dRdS Z/dTdU Z0dVdW Z1dXdY Z2dZS )[TestSpecificsc             C   s   t |dd d S )Nz<single>single)compile)selfsource r
   U/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/test/test_compile.pycompile_single   s    zTestSpecifics.compile_singlec             C   s   |  t| j| d S )N)assertRaisesSyntaxErrorr   )r   r	   r
   r
   r   assertInvalidSingle   s    z!TestSpecifics.assertInvalidSinglec             C   s   t ddd t ddd d S )Nhiz<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 z<test>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
z<test>r   zhi
stuff
def f():
    passz(this_isreally_old_macdef f():
    pass)r   )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sureT)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): passz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)z<string>r   )r   r   r   )r   r
   r
   r   test_none_keyword_arg6   s    z#TestSpecifics.test_none_keyword_argc             C   s   |  ttd d S )Nzdef f(a): global a; a = 1)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 ytd|| W n tk
rX   Y nX | 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Zdd Zdd Zdd ZdS )	zBTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.Mz9Test mapping interface versus possible calls from eval().c             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 )N)results)r   r'   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)list)r   r
   r
   r   keysF   s    zGTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.M.keysN)__name__
__module____qualname____doc__r(   r+   r.   r
   r
   r
   r   M>   s   r3   zz = a)zr%   zz = bzDid not detect a KeyErrorz	z = dir()r4   r,   zz = globals()zz = locals()c               @   s   e Zd ZdZdS )zBTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.AzNon-mappingN)r/   r0   r1   r2   r
   r
   r
   r   A[   s   r5   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 )Nr$   r%   )dictr(   )r   r'   r
   r
   r   r(   c   s    zNTestSpecifics.test_exec_with_general_mapping_for_locals.<locals>.D.__getitem__N)r/   r0   r1   r(   r
   r
   r
   r   Db   s   r7   r%   )
globalsr   r   r)   	NameErrorfailr-   r   	TypeErrorr6   )r   r3   mgr5   r7   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longexprr=   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): pass)r   r   r   )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:
        passz<string>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  xdD ]}|  tt| qW | 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00jy                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   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 l    Z0xffffffffffffffffl    l z)How many bits *does* this machine have???z%s      )sysmaxsizer   r   r:   assertIsInstanceint)r   Zall_one_bitsr
   r
   r   test_unary_minus   s    


zTestSpecifics.test_unary_minusl    c       
      C   sL   d}d}d}d}d}d}d}d}x&| j jjD ]}	|	d k	r,| |	t q,W d S )	Nl        l     l          l       l            l         l    l )test_32_63_bit_values__code__	co_constsr\   r]   )
r   r$   bcr>   erA   r=   hvariabler
   r
   r   r_      s    z#TestSpecifics.test_32_63_bit_valuesc             C   s(   dpd\}}|  |d |  |d d S )N)rX   )rg   rX   rX   rg   )r   )r   ijr
   r
   r   test_sequence_unpacking_error   s    z+TestSpecifics.test_sequence_unpacking_errorc             C   sZ   ddddddddd	d
ddg}x8|D ]0}|d7 }|  tt|dd |  tt|dd q"W d S )Nz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 NonerI   tmpr   r   )r   r   r   )r   Zstmtsstmtr
   r
   r   test_none_assignment   s     
z"TestSpecifics.test_none_assignmentc             C   s   ddddddddd	d
dddddg}ddddddddddddddddd d!d"d#d$d%g}x|D ]}t |d&d' qXW x|D ]}| tt |d&d' qrW d S )(Nz
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),rk   r   )r   r   r   )r   Zsucceedr:   rl   r
   r
   r   test_import   sR    

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 )NrX   c             S   s   | S )Nr
   )xr
   r
   r   <lambda>.      zITestSpecifics.test_for_distinct_code_objects.<locals>.f.<locals>.<lambda>rY   c             S   s   | S )Nr
   )ro   r
   r
   r   rp   /  rq   )rX   )rY   r
   )f1f2r
   r
   r   rA   -  s    

z7TestSpecifics.test_for_distinct_code_objects.<locals>.f)assertNotEqualidr`   )r   rA   rr   rs   r
   r
   r   test_for_distinct_code_objects+  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   rp   5  rq   z/TestSpecifics.test_lambda_doc.<locals>.<lambda>)assertIsNoner2   )r   lr
   r
   r   test_lambda_doc4  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
rk   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   rC   r
   r
   r   test_encoding8  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 )N)data)r   r
   r
   r   __init__Q  s    z7TestSpecifics.test_subscripts.<locals>.str_map.__init__c             S   s   | j t| S )N)r|   str)r   r'   r
   r
   r   r(   S  s    z:TestSpecifics.test_subscripts.<locals>.str_map.__getitem__c             S   s   || j t|< d S )N)r|   r~   )r   r'   r*   r
   r
   r   r+   U  s    z:TestSpecifics.test_subscripts.<locals>.str_map.__setitem__c             S   s   | j t|= d S )N)r|   r~   )r   r'   r
   r
   r   __delitem__W  s    z:TestSpecifics.test_subscripts.<locals>.str_map.__delitem__c             S   s   t || jkS )N)r~   r|   )r   r'   r
   r
   r   __contains__Y  s    z;TestSpecifics.test_subscripts.<locals>.str_map.__contains__N)r/   r0   r1   r}   r(   r+   r   r   r
   r
   r
   r   str_mapP  s
   r   rX   rY   )rX   rX      .)..)objectr   assertNotInsliceEllipsis)r   r   r>   r
   r
   r   test_subscriptsM  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
   ).0rh   r
   r
   r   	<genexpr>  s    z6TestSpecifics.test_annotation_limit.<locals>.<genexpr>i,  r   r   )rL   ranger   )r   rG   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 )NrX   rY   r   )_A__mangled_modZ__package__.module)_A__mangled__not_mangled__r   __package__r
   r
   r   rA     s    z(TestSpecifics.test_mangling.<locals>.A.fN)r/   r0   r1   rA   r
   r
   r
   r   r5     s   r5   r   r   r   r   )assertInrA   r`   co_varnames)r   r5   r
   r
   r   test_mangling  s
    zTestSpecifics.test_manglingc       	   	   C   s8  t }| dr|d d }t|d}| }W d Q R X ddgddgdd	gd
dg||gg}xv|D ]n\}}t|d| d}t|d| dtj}| t	|tj
k t|d| d}| || | |jd|  qdW tdddtj}| tt|dd | ttt dd t
 }t g|_| tt|dd d S )NZpycrg   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)z<string>z<ast>r   )__file__lowerendswithopenreadr   _astZPyCF_ONLY_AST
assertTruetypeModuler   co_filenamer   r;   ZIfZBoolOpbody)	r   fnamerA   Z	fcontentsZsample_coderC   Zco1astZco2r
   r
   r   test_compile_ast  s.    
zTestSpecifics.test_compile_astc                s:   d  fdd}| | | | i}|  |ddd d S )Nr   c                  s    d7   S )NrX   r
   r
   )rh   r
   r   rA     s    z3TestSpecifics.test_dict_evaluation_order.<locals>.frY      )rX   r   )r   )r   rA   r>   r
   )rh   r   test_dict_evaluation_order  s    z(TestSpecifics.test_dict_evaluation_orderc          
   C   s   x&dD ]}t d|d}| |jd qW xHtdtdfD ]4}| t t d|d}W d Q R X | |jd q:W | tt dt	dd d S )N)zfile.pys   file.pypassr   zfile.pys   file.py)
r   r   r   	bytearray
memoryviewassertWarnsDeprecationWarningr   r;   r-   )r   r    rC   r
   r
   r   test_compile_filename  s    
z#TestSpecifics.test_compile_filenamec             C   s@   d}t |dd}x*|jD ] }t|tjr| |j|j qW d S )Nzdef f(): pass
def g(): passZmyfiler   )r   ra   
isinstancetypesCodeTypeassertIsr   )r   rG   rc   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   sf   d}t  B}tj|d}t|d}|| W d Q R X t|d }W d Q R X | 	d|j
 d S )Ns   0000 
00000000000
 

zbad.pywbr   s	   Non-UTF-8)tempfileTemporaryDirectoryospathrL   r   writer   run_python_until_endr   err)r   srctmpdrK   fpresr
   r
   r   "test_particularly_evil_undecodable  s    
z0TestSpecifics.test_particularly_evil_undecodablec          
   C   sf   d}t  B}tj|d}t|d}|| W d Q R X t|d }W d Q R X | 	d|j
 d S )Ns   # 
#
zbad.pyr   r   s	   Non-UTF-8)r   r   r   r   rL   r   r   r   r   r   r   )r   r   r   rK   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 )
Nr   g      ?c          	      sX   | |  } | | |   }d| | }jt|d  | W d Q R X d S )NzCompiling ({!r} + {!r} * {}))msg)r   formatr   RecursionError)prefixZrepeatedZ	expect_okbrokendetails)
fail_depthr   success_depthr
   r   check_limit"  s    

z@TestSpecifics.test_compiler_recursion_limit.<locals>.check_limitr$   z()z.bz[0]z*a)rZ   getrecursionlimitr]   )r   r   r
   )r   r   r   r   test_compiler_recursion_limit  s    		


z+TestSpecifics.test_compiler_recursion_limitc          	   C   s  |  td tddd W d Q R X |  td ttddd W d Q R X 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 z<dummy>r   s   123 rX   rg      s   1234s   $23$s   ax = 123ro   r%   )assertRaisesRegex
ValueErrorr   r   r   r   r6   r   )r   rC   	namespacer
   r
   r   test_null_terminated0  s    z"TestSpecifics.test_null_terminatedc             C   s>   x8|j jD ]}t|t|kr
P q
W | d||j jf  d S )Nz unable to find constant %r in %r)r`   ra   reprr:   )r   funcexpectedconstr
   r
   r   check_constantD  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  }}  |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: %rrr   rs   )r   r   r`   r   r   r   )r   nsrC   rr   rs   )r   r
   r   check_same_constantS  s    
z?TestSpecifics.test_merge_constants.<locals>.check_same_constantr   g        s   abcabcc               S   s   dS )N.r
   r
   r
   r
   r   rp   e  rq   z4TestSpecifics.test_merge_constants.<locals>.<lambda>c             S   s   | dkS )N>   r   r
   )ro   r
   r
   r   rp   l  rq   )r   r`   r   r   r   r   	frozensetr   )r   r   rr   rs   r
   )r   r   test_merge_constantsN  s    
z"TestSpecifics.test_merge_constantsc             C   s(   dd }|  dtt|d j dS )z9Regression test for issue35193 when run under clang msan.c               S   s   dS )Nr   Zunreachable)RuntimeErrorr
   r
   r
   r   unused_code_at_endx  s    zcTestSpecifics.test_peephole_opt_unreachable_code_array_access_in_bounds.<locals>.unused_code_at_endRETURN_VALUErg   N)r   r-   disget_instructionsopname)r   r   r
   r
   r   9test_peephole_opt_unreachable_code_array_access_in_boundsu  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 )Nzf1, f2 = lambda: %r, lambda: %rrr   rs   )r   assertIsNotr`   rt   r   r   r   )Zconst1Zconst2r   rr   rs   )r   r
   r   check_different_constants  s    zJTestSpecifics.test_dont_merge_constants.<locals>.check_different_constantsr   g        g       )r   )g        r$      a)r$   )r   c               S   s   dS )Ny                r
   r
   r
   r
   r   rp     rq   z9TestSpecifics.test_dont_merge_constants.<locals>.<lambda>c               S   s   dS )Ny              r
   r
   r
   r
   r   rp     rq   y                y              c             S   s   | dkS )N>   r   r
   )ro   r
   r
   r   rp     rq   c             S   s   | dkS )N>           r
   )ro   r
   r
   r   rp     rq   )r   r`   r   r   r   r   r   )r   r   rr   rs   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@ z<dummy>r   )r   )r   r
   r
   r   test_stack_overflow  s    z!TestSpecifics.test_stack_overflowN)3r/   r0   r1   r   r   r   r   r   r   r   r!   r"   r#   r?   rD   rE   rF   rH   rQ   rV   r^   rZ   r[   r_   rj   rm   rn   rv   ry   r{   r   r   r   r   r   r   r   cpython_onlyr   r   r   r   r   r   r   r   r   r   r   r   r   r
   r
   r
   r   r      sZ   		/!
/	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   r~   r   mathceilloglenco_codeassertLessEqualco_stacksize)r   rC   max_sizer
   r
   r   check_stack_size  s    
z(TestExpressionStackSize.check_stack_sizec             C   s   |  d| j d  d S )Nzx and ro   )r   N)r   r
   r
   r   test_and  s    z TestExpressionStackSize.test_andc             C   s   |  d| j d  d S )Nzx or ro   )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 ro   )r   r   )r   r
   r
   r   test_and_or  s    z#TestExpressionStackSize.test_and_orc             C   s   |  d| j d  d S )Nzx < ro   )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 ro   )r   r   )r   r
   r
   r   test_if_else  s    z$TestExpressionStackSize.test_if_elsec             C   s   |  d| j d  d S )Nzx + ro   )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   rC   r
   r
   r   test_func_and  s    z%TestExpressionStackSize.test_func_andN)r/   r0   r1   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   r`   )rh   r   scriptrC   )async_snippetr
   r   compile_snippet  s    z@TestStackSizeStability.check_stack_size.<locals>.compile_snippetc                s   g | ]} |j qS r
   )r   )r   rh   )r   r
   r   
<listcomp>  s    z;TestStackSizeStability.check_stack_size.<locals>.<listcomp>rY   rB   rX   r   )filez<stack sizes diverge with # of consecutive snippets: %s
%s
%s)r   r   setr   ioStringIOr:   getvalue)r   r   r   sizesr   r  outr
   )r   r   r   r   r     s    	z'TestStackSizeStability.check_stack_sizec             C   s   d}|  | d S )Nz1
            if x:
                a
            )r   )r   r   r
   r
   r   test_if  s    zTestStackSizeStability.test_ifc             C   s   d}|  | d S )Nz{
            if x:
                a
            elif y:
                b
            else:
                c
            )r   )r   r   r
   r
   r   r     s    z#TestStackSizeStability.test_if_elsec             C   s   d}|  | d S )NzV
            try:
                a
            except:
                b
            )r   )r   r   r
   r
   r   test_try_except_bare  s    z+TestStackSizeStability.test_try_except_barec             C   s   d}|  | d S )Nz
            try:
                a
            except ImportError:
                b
            except:
                c
            else:
                d
            )r   )r   r   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
            )r   )r   r   r
   r
   r   test_try_except_as  s    
z)TestStackSizeStability.test_try_except_asc             C   s   d}|  | d S )Nzg
                try:
                    a
                finally:
                    b
            )r   )r   r   r
   r
   r   test_try_finally&  s    z'TestStackSizeStability.test_try_finallyc             C   s   d}|  | d S )Nz8
            with x as y:
                a
            )r   )r   r   r
   r
   r   	test_with/  s    z TestStackSizeStability.test_withc             C   s   d}|  | d S )NzX
            while x:
                a
            else:
                b
            )r   )r   r   r
   r
   r   test_while_else6  s    z&TestStackSizeStability.test_while_elsec             C   s   d}|  | d S )Nz7
            for x in y:
                a
            )r   )r   r   r
   r
   r   test_for?  s    zTestStackSizeStability.test_forc             C   s   d}|  | d S )Nz[
            for x in y:
                a
            else:
                b
            )r   )r   r   r
   r
   r   test_for_elseF  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
            )r   )r   r   r
   r
   r   test_for_break_continueO  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
            )r   )r   r   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 )Nz
            for x in y:
                try:
                    t
                finally:
                    if z:
                        break
                    else:
                        a
            else:
                b
            )r   )r   r   r
   r
   r   #test_for_break_inside_finally_blockn  s    z:TestStackSizeStability.test_for_break_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
            )r   )r   r   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
            )r   )r   r   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
            )r   )r   r   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
            )r   )r   r   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
            )r   )r   r   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
            )r   )r   r   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   )r   )r   r   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
            T)r   )r   )r   r   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
            T)r   )r   )r   r   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
            T)r   )r   )r   r   r
   r
   r   /test_for_break_continue_inside_async_with_block  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
            T)r   )r   )r   r   r
   r
   r   #test_return_inside_async_with_block  s    z:TestStackSizeStability.test_return_inside_async_with_blockN)F)r/   r0   r1   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
   r
   r
   r   r     s2   
				
	r   __main__)r   r   r   unittestrZ   r   r   r   testr   Ztest.supportr   r   TestCaser   r   r   r/   mainr
   r
   r
   r   <module>   s*        .&  #