add-determinism 0.7.3

RPM buildroot helper to strip nondeterministic bits in files
Documentation
3

�7_��c@s�ddlZddlZddlZddlZddlZddlZddlmZddlm	Z	Gdd�dej
�ZGdd�dej
�ZGdd	�d	ej
�Z
Gd
d�dej
�ZGdd
�d
ej
�ZGdd�dej
�Zedkr�ej�dS)�N)�support)�assert_python_failurec@seZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAS)B�RoundtripLegalSyntaxTestCasecCsl||�}|j�}ytj|�}Wn6tjk
rT}z|jd||f�WYdd}~XnX|j||j�d�dS)Nzcould not roundtrip %r: %sz!could not re-generate syntax tree)�totuple�parser�sequence2st�ParserError�fail�assertEqual)�self�f�s�st1�t�st2Zwhy�r�(/usr/lib64/python3.6/test/test_parser.py�	roundtrips$z&RoundtripLegalSyntaxTestCase.roundtripcC�|jtj|�dS�N)rr�expr�r
rrrr�
check_expr�z'RoundtripLegalSyntaxTestCase.check_exprcCs6tjd�}|j�}i}t|i|�|j|dt�dS)Nz/from __future__ import unicode_literals; x = ''�x)r�suite�compile�execZassertIsInstance�str)r
r�codeZscoperrr�test_flags_passed s

z.RoundtripLegalSyntaxTestCase.test_flags_passedcCrr)rrrrrrr�check_suite)rz(RoundtripLegalSyntaxTestCase.check_suitecC�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd	�|jd
�|jd�|jd�|jd
�|jd�|jd�|jd�|jd�dS)Nzdef f(): yield 1zdef f(): yieldzdef f(): x += yieldzdef f(): x = yield 1zdef f(): x = y = yield 1zdef f(): x = yieldzdef f(): x = y = yieldzdef f(): 1 + (yield)*2zdef f(): (yield 1)*2zdef f(): return; yield 1zdef f(): yield 1; returnzdef f(): yield from 1zdef f(): x = yield from 1zdef f(): f((yield from 1))zdef f(): yield 1; return 1z1def f():
    for x in range(30):
        yield x
z)def f():
    if (yield):
        yield x
�r �r
rrr�test_yield_statement,s"















z1RoundtripLegalSyntaxTestCase.test_yield_statementcC�@|jd�|jd�|jd�|jd�|jd�|jd�dS)Nzasync def f():
 await smth()z"async def f():
 foo = await smth()z'async def f():
 foo, bar = await smth()zasync def f():
 (await smth())z#async def f():
 foo((await smth()))z&async def f():
 await foo(); return 42r"r#rrr�test_await_statementCs




z1RoundtripLegalSyntaxTestCase.test_await_statementcC�|jd�|jd�dS)Nz"async def f():
 async with 1: passz/async def f():
 async with a as b, c as d: passr"r#rrr�test_async_with_statementK�
z6RoundtripLegalSyntaxTestCase.test_async_with_statementcCr')Nz'async def f():
 async for i in (): passz*async def f():
 async for i, b in (): passr"r#rrr�test_async_for_statementOr)z5RoundtripLegalSyntaxTestCase.test_async_for_statementcCr')Nz3def f():
    x = 0
    def g():
        nonlocal x
z:def f():
    x = y = 0
    def g():
        nonlocal x, y
r"r#rrr�test_nonlocal_statementSs
z4RoundtripLegalSyntaxTestCase.test_nonlocal_statementcCs�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd	�|jd
�|jd�|jd�|jd
�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd �|jd!�|jd"�|jd#�|jd$�|jd%�|jd&�|jd'�|jd(�dS))Nzfoo(1)z	[1, 2, 3]z[x**3 for x in range(20)]z"[x**3 for x in range(20) if x % 3]z+[x**3 for x in range(20) if x % 2 if x % 3]�list(x**3 for x in range(20))z&list(x**3 for x in range(20) if x % 3)z/list(x**3 for x in range(20) if x % 2 if x % 3)z
foo(*args)zfoo(*args, **kw)z	foo(**kw)zfoo(key=value)zfoo(key=value, *args)zfoo(key=value, *args, **kw)zfoo(key=value, **kw)zfoo(a, b, c, *args)zfoo(a, b, c, *args, **kw)zfoo(a, b, c, **kw)zfoo(a, *args, keyword=23)z	foo + barz	foo - barz	foo * barz	foo / barz
foo // barz	lambda: 0zlambda x: 0zlambda *y: 0zlambda *y, **z: 0z
lambda **z: 0zlambda x, y: 0zlambda foo=bar: 0z"lambda foo=bar, spaz=nifty+spit: 0zlambda foo=bar, **z: 0z#lambda foo=bar, blaz=blat+2, **z: 0z'lambda foo=bar, blaz=blat+2, *y, **z: 0zlambda x, *y, **z: 0z(x for x in range(10))zfoo(x for x in range(10))z...za[...]�rr#rrr�test_expressions]sP






































z-RoundtripLegalSyntaxTestCase.test_expressionscC�|jd�dS)N�ar"r#rrr�test_simple_expression��z3RoundtripLegalSyntaxTestCase.test_simple_expressioncCr')Nza = bza = b = c = d = er"r#rrr�test_simple_assignments�r)z4RoundtripLegalSyntaxTestCase.test_simple_assignmentscJCs�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd	�|jd
�|jt��tdii�WdQRX|jt��tdii�WdQRX|jt��td
ii�WdQRX|jt��tdii�WdQRX|jt��tdii�WdQRX|jt��tdii�WdQRX|jt��tdii�WdQRX|jt��tdii�WdQRX|jt��tdii�WdQRX|jt��tdii�WdQRXdS)Nz
x: int = 5z"y: List[T] = []; z: [list] = fun()zx: tuple = (1, 2)zd[f()]: int = 42zf(d[x]): str = 'abc'zx.y.z.w: complex = 42jzx: intz#def f():
    x: str
    y: int = 5
z#class C:
    x: str
    y: int = 5
zIclass C:
    def __init__(self, x: int) -> None:
        self.x: int = x
z2+2: intz[]: int = 5zx, *y, z: int = range(5)zt: tuple = 1, 2z
u = v: intz
False: intzx.False: intz	x.y,: intz[0]: intzf(): int)r �assertRaises�SyntaxErrorrr#rrr�test_var_annot�s<









z+RoundtripLegalSyntaxTestCase.test_var_annotcCs||jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd	�|jd
�|jd�|jd�dS)
Nza += bza -= bza *= bza /= bza //= bza %= bza &= bza |= bza ^= bza <<= bza >>= bza **= br"r#rrr�!test_simple_augmented_assignments�s










z>RoundtripLegalSyntaxTestCase.test_simple_augmented_assignmentscCsl|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd	�|jd
�|jd�|jd�|jd
�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd �|jd!�|jd"�|jd#�|jd$�dS)%Nz
def f(): passzdef f(*args): passzdef f(*args, **kw): passzdef f(**kw): passzdef f(foo=bar): passzdef f(foo=bar, *args): passz!def f(foo=bar, *args, **kw): passzdef f(foo=bar, **kw): passzdef f(a, b): passzdef f(a, b, *args): passzdef f(a, b, *args, **kw): passzdef f(a, b, **kw): passzdef f(a, b, foo=bar): passz!def f(a, b, foo=bar, *args): passz'def f(a, b, foo=bar, *args, **kw): passz def f(a, b, foo=bar, **kw): passz@staticmethod
def f(): passz,@staticmethod
@funcattrs(x, y)
def f(): passz@funcattrs()
def f(): passzdef f(*, a): passzdef f(*, a = 5): passzdef f(*, a = 5, b): passzdef f(*, a, b = 5): passz def f(*, a, b = 5, **kwds): passzdef f(*args, a): passzdef f(*args, a = 5): passzdef f(*args, a = 5, b): passzdef f(*args, a, b = 5): passz$def f(*args, a, b = 5, **kwds): passzdef f(a: int): passzdef f(a: int = 5): passzdef f(*args: list): passzdef f(**kwds: dict): passzdef f(*, a: int): passzdef f(*, a: int = 5): passzdef f() -> int: passr"r#rrr�test_function_defs�sH


































z/RoundtripLegalSyntaxTestCase.test_function_defscC�6|jd�|jd�|jd�|jd�|jd�dS)Nzclass foo():passzclass foo(object):passz!@class_decorator
class foo():passz&@class_decorator(arg)
class foo():passz(@decorator1
@decorator2
class foo():passr"r#rrr�test_class_defs�s




z,RoundtripLegalSyntaxTestCase.test_class_defscCr!)Nzfrom sys.path import *zfrom sys.path import dirnamezfrom sys.path import (dirname)zfrom sys.path import (dirname,)z*from sys.path import dirname as my_dirnamez,from sys.path import (dirname as my_dirname)z-from sys.path import (dirname as my_dirname,)z&from sys.path import dirname, basenamez(from sys.path import (dirname, basename)z)from sys.path import (dirname, basename,)z4from sys.path import dirname as my_dirname, basenamez6from sys.path import (dirname as my_dirname, basename)z7from sys.path import (dirname as my_dirname, basename,)z5from sys.path import dirname, basename as my_basenamez7from sys.path import (dirname, basename as my_basename)z8from sys.path import (dirname, basename as my_basename,)zfrom .bogus import xr"r#rrr�test_import_from_statement�s.









z7RoundtripLegalSyntaxTestCase.test_import_from_statementcCr9)Nz
import syszimport sys as systemzimport sys, mathzimport sys as system, mathzimport sys, math as my_mathr"r#rrr�test_basic_import_statement�




z8RoundtripLegalSyntaxTestCase.test_basic_import_statementcCsT|jd�|jd�|jd�|jd�|jd�|jd�|jd�|jd�dS)	Nzfrom . import namezfrom .. import namezfrom ... import namezfrom .... import namezfrom .pkg import namezfrom ..pkg import namezfrom ...pkg import namezfrom ....pkg import namer"r#rrr�test_relative_importss






z2RoundtripLegalSyntaxTestCase.test_relative_importscCr/)Nz"# -*- coding: iso-8859-1 -*-
pass
r"r#rrr�test_pep263+rz(RoundtripLegalSyntaxTestCase.test_pep263cCr/)Nzassert alo < ahi and blo < bhi
r"r#rrr�test_assert/rz(RoundtripLegalSyntaxTestCase.test_assertcC�"|jd�|jd�|jd�dS)Nzwith open('x'): pass
zwith open('x') as f: pass
z*with open('x') as f, open('y') as g: pass
r"r#rrr�	test_with2�

z&RoundtripLegalSyntaxTestCase.test_withcCr%)Nztry: pass
except: pass
ztry: pass
finally: pass
z'try: pass
except A: pass
finally: pass
z4try: pass
except A: pass
except: pass
finally: pass
z"try: pass
except: pass
else: pass
z0try: pass
except: pass
else: pass
finally: pass
r"r#rrr�
test_try_stmt7s




z*RoundtripLegalSyntaxTestCase.test_try_stmtcs@d}tj|�}�fdd��d&d'd(d)d*d+d,d.d/d0d1d2d3d5d7d9g}|jt�|jddd���|�|jt�|j���dd�|D��|jt�|jdd ���d!d�|D��|jt�|jdd"���d#d�|D��|jt�|jddd���d$d�|D��|jt�tj|ddd���|�|jt�tj|ddd���d%d�|D��dS):Nzdef f(x):
    return x + 1c3sX|d}|d}t|ttf�rNx4|dd�D]}x�|�D]
}|Vq:Wq,Wn|VdS)Nr�)�
isinstanceZtuple�list)�treeZ	node_typeZnextZeltr��walkrrrJGsz8RoundtripLegalSyntaxTestCase.test_position.<locals>.walkrE�defrr���(�r���)��:��	��return��+�
�1��T)�	line_info�col_infocSsg|]\}}}}||f�qSrr��.0r�nZl�crrr�
<listcomp>g�z>RoundtripLegalSyntaxTestCase.test_position.<locals>.<listcomp>)r_cSsg|]\}}}}|||f�qSrrrarrrreirf)r`cSsg|]\}}}}|||f�qSrrrarrrrekrfcS�g|]}t|��qSr�rG�rbrrrrremrfcSrgrrhrirrrresrf)rErKrEr)rErrErL)rMrNrErO)rErrErP)rQrRrErM)rSrTrErQ)rLrUrErV�����)rOrUrWrj)rErXrWrL)rErrWrS)rYrZrWr[)rWr\rWr])rLrUrWr^rj)rPrUrWrjrj)rLrUrWrjrj)rrUrWrj)rrr	rGrZtolistZst2tupleZst2list)r
r�stZexpectedrrIr�
test_positionAsF


z*RoundtripLegalSyntaxTestCase.test_positioncCs,|jd�|jd�|jd�|jd�dS)Nz*a = yz
x, *b, = mz[*a, *b] = yzfor [*x, b] in x: passr"r#rrr�test_extended_unpackingus


z4RoundtripLegalSyntaxTestCase.test_extended_unpackingcCrA)Nzraise
zraise e
zBtry:
    suite
except Exception as e:
    raise ValueError from e
r"r#rrr�test_raise_statement{rCz1RoundtripLegalSyntaxTestCase.test_raise_statementcCr')Nz[]z[*{2}, 3, *[4]]r-r#rrr�test_list_displays�r)z/RoundtripLegalSyntaxTestCase.test_list_displayscCr9)Nz{*{2}, 3, *[4]}z{2}z{2,}z{2, 3}z{2, 3,}r-r#rrr�test_set_displays�r=z.RoundtripLegalSyntaxTestCase.test_set_displayscCsJ|jd�|jd�|jd�|jd�|jd�|jd�|jd�dS)Nz{}z{a:b}z{a:b,}z
{a:b, c:d}z{a:b, c:d,}z{**{}}z{**{}, 3:4, **{5:6, 7:8}}r-r#rrr�test_dict_displays�s





z/RoundtripLegalSyntaxTestCase.test_dict_displayscCr9)Nz
f(*a, **b)zf(a, *b, *c, *d)zf(**a, **b)zf(2, *a, *b, **b, **c, **d)z0f(*b, *() or () and (), **{} and {}, **() or {})r-r#rrr�test_argument_unpacking�r=z4RoundtripLegalSyntaxTestCase.test_argument_unpackingcCrA)Nz{x for x in seq}z{f(x) for x in seq}z#{f(x) for x in seq if condition(x)}r-r#rrr�test_set_comprehensions�rCz4RoundtripLegalSyntaxTestCase.test_set_comprehensionscCrA)Nz{x:x for x in seq}z({x**2:x[3] for x in seq if condition(x)}z4{x:x for x in seq1 for y in seq2 if condition(x, y)}r-r#rrr�test_dict_comprehensions�rCz5RoundtripLegalSyntaxTestCase.test_dict_comprehensionsN)#�__name__�
__module__�__qualname__rrrr r$r&r(r*r+r.r1r3r6r7r8r:r;r<r>r?r@rBrDrlrmrnrorprqrrrsrtrrrrrs@	
*'0
4	rc@s\eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�ZdS)�IllegalSyntaxTestCasecCs8ytj|�Wntjk
r$YnX|jd|�dS)Nz"did not detect invalid tree for %r)rrrr)r
rHZlabelrrr�check_bad_tree�s
z$IllegalSyntaxTestCase.check_bad_treecCs|jdd�dS)NrErW�z<junk>)rErWrz�ryr#rrr�	test_junk�r2zIllegalSyntaxTestCase.test_junkc	CsDd}|j|d
�d"}|j|d�d+}|j|d�d4}|j|d�dS)5N��
���rErLrUrz too small items in terminal node�passz'non-string second item in terminal node�pass�0z'non-integer third item in terminal nodeztoo many items in terminal node�rE�r�r��r�r��rLrU�rr�r��r~r�r��rrU)r}r�r�r��rEr��r�r��r�r�r��rr�r��r~r�r�r�)r}r�r�r��rEr�r�r�r�r��r�r�r��rr�r��r~r�r�r�)r}r�r�r��rEr�rr�r�r��r�r�r��rr�r��r~r�r�r�)r}r�r�r�r{�r
rHrrr�test_illegal_terminal�sPz+IllegalSyntaxTestCase.test_illegal_terminalc$Csdg}|j|d,�dS)hNr}���rErKr�rMrNrQrRrSrT�#rLrUrO�	�
��rX�9�$�%�&�'�)�*�+�,�-�.�/�0�1rWr\��yieldrPr�def f():
  return 1
  yield 1�rErK�rEr�rMrN�rQrR�r�r�r��rSrTr��rOrU�rErX�rWr\�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�r��r�r��r�r��rEr�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��rPrU�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�rrr�test_illegal_yield_1�sfz*IllegalSyntaxTestCase.test_illegal_yield_1c%Csdy}|j|d3�dS)zNr}r�r�r��rE�from��
__future__�import��
generatorsrLrUr�r�rKrr�rMrNrQrRrSrTr�rOr�r�rXr�r�r�r�r�r�r�r�r�r�r�r�r�r�rWr\r�r�rPrr��rEr��rEr��r�r��rEr��rEr��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�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�r�r�r�r�r�r�r�r�r�r�r�r�r�)r}r�r�r{r�rrr�test_illegal_yield_2!sxz*IllegalSyntaxTestCase.test_illegal_yield_2cCsd:}|j|d�dS);N��7�"r�r�r�r��(r�r�r�r�r�r�r�rEr0��,rdrLrUrza,,c�rEr0�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�rErd�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�rrrrr�r�)r�rr�r�r{r�rrr�test_a_comma_comma_cas.z*IllegalSyntaxTestCase.test_a_comma_comma_ccCsdD}|j|d�dS)ENr}r�r�r���8r�r�r�r�r�r�r�r�r�r�r�r�r�rEr0��%�$=�brLrUrza $= br��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'�rr(�rr�rr*�rEr�r�r,�r�r-�r�r.�r�r/�r�r0�r�r1�r�r2�r�r3�r�r4�r�r5�r�r6�r�r7�r�r8�rr9�rr)r+r:�r�r;r��r�r<r��r�r=r�)r}r>r�r{r�rrr�test_illegal_operator|s:z+IllegalSyntaxTestCase.test_illegal_operatorcCsd}|j|d�dS)Nr}r�r�r��rE�foorLrUrzmalformed global ast�rErA�r@rB�r�rCr��r�rDr��r�rEr�r�)r}rFr�r�r{r�rrr�test_malformed_global�sz+IllegalSyntaxTestCase.test_malformed_globalcCsd}|j|d�dS)Nr}rr~rr@�rEr�r��r��fredrLrUrzfrom import fredr�r��rErJ�r�rK�rIrL�rHr�r�rM�r@rN�rrOr��r~rPr��rrQr�r�)r}rRr�r�r{r�rrr�test_missing_import_source�sz0IllegalSyntaxTestCase.test_missing_import_sourcec	CsHd}|j|d�d}|j|d�d}|jt��tj|�WdQRXdS)N�Sr}rrUzmissed encoding�
iso-8859-1znon-string encoding����r��r}r�)rTrWr�rW)rTrWrUr�rW)rTrWrV)ryr4ZUnicodeEncodeErrorrrr�rrr�test_illegal_encoding�sz+IllegalSyntaxTestCase.test_illegal_encodingN)
rurvrwryr|r�r�r�rr?rGrSrXrrrrrx�s.7@!rxc@s<eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
S)�CompileTestCasecCs(tjd�}tj|�}|jt|�d�dS)N�2 + 3rO�rr�	compilestr	Zeval)r
rkrrrr�test_compile_expr�rCz!CompileTestCase.test_compile_exprcCs6tjd�}tj|�}i}t||�|j|dd�dS)N�x = 2; y = x + 3ZyrO)rrr\rr	)r
rkrZglobsrrr�test_compile_suite�s



z"CompileTestCase.test_compile_suitecCstjd�}|jttj|�dS)Nz	1 = 3 + 4�rrr4r5r\�r
rkrrr�test_compile_error�r)z"CompileTestCase.test_compile_errorcCs8tjd�}|jttj|�tjd�}|jttj|�dS)Nza = "\U12345678"z	a = "\u1"r`rarrr�test_compile_badunicode�s

z'CompileTestCase.test_compile_badunicodecCsBtjd�}tj|�}|jt|�d�tj|�}|jt|�d�dS)Nz-3rz�����rdr[)r
rkZcode1Zcode2rrr�test_issue_9011�s



zCompileTestCase.test_issue_9011cCstjd�}tj|�}|j|jd�|j�}|j|jd�x>dD]6}tj||�}|j|jd�|j|�}|j|jd�q>Wxvtd�td�fD]b}|jt	��tj||�}WdQRX|j|jd�|jt	��|j|�}WdQRX|j|jd�q�W|j
ttj|td��|j
t|jtd��dS)Nza + 5z
<syntax-tree>�file.py�file.py)rfrg)
rrr\r	Zco_filenamerZ	bytearrayZ
memoryviewZassertWarnsZDeprecationWarningr4�	TypeErrorrG)r
rkrZfilenamerrr�test_compile_filename�s&



z%CompileTestCase.test_compile_filenameN)	rurvrwr]r_rbrcrerirrrrrY�s
rYc@s$eZdZdd�Zdd�Zdd�ZdS)�ParserStackLimitTestCasecCsd|d|S)N�[�]r)r
Zlevelrrr�_nested_expressionrz+ParserStackLimitTestCase._nested_expressioncCs |jd�}tj|�}|j�dS)Ni])rmrrr)r
�erkrrr�test_deeply_nested_list
s

z0ParserStackLimitTestCase.test_deeply_nested_listcCs6|jd�}td|�\}}}|jd|�|jd|�dS)Nidz-css_push: parser stack overflowsMemoryError)rmrZassertIn)r
rnZrcZoutZerrrrr�test_trigger_memory_errors
z2ParserStackLimitTestCase.test_trigger_memory_errorN)rurvrwrmrorprrrrrjsrjc@s0eZdZdd�Zdd�ZejZejdd��ZdS)�STObjectTestCasec
Cstjd�}tjd�}tjd�}tjd�}tjd�}tjd�}|j||kd�|j||kd�|j||kd�|j||�|j||�|j||�|j||kd�|j||kd�|j||kd�|j||kd�|j||kd�|j||kd�|j||kd�|j||kd�|j||kd�|j||kd�|j||kd�|j||kd�|j||k||k�|j||k||k�|j||k||k�|j||k||k�|j||k||k�|j||k||k�|j||k||k�|j||k||k�|j||k||k�t|||�}t|||�}t|||g�d}	|j||	k�|j||k�|j|	|k�|j||	k�|j||k�|j|	|k�|j||k�|j|	|	k�|j||k�|j|dkd�|jd|kd�|jt	t
j|d�|jt	t
jd|�|jt	t
j
|d	�|jt	t
jd
|�dS)NrZr^r,TFrEg��hҘ@zspanish armadaiswaterloo)rrrr	ZminZmaxZsortedZ
assertTruer4rh�operatorZgeZleZltZgt)
r
r
rZst3Zst1_copyZst2_copyZst3_copyZbottomZtopZmidrrr�test_comparisonssf





z!STObjectTestCase.test_comparisonscCs�tjd�tjd�tjd�g}x�|D]~}tj|�}|j|j�|j��tj|�}|j|j�|j��x<ttj	d�D]*}tj
tj||��}|j|j�|j��qrWq"WdS)NrZr^r,rE)rrr�copyr	rZdeepcopyZrange�pickleZHIGHEST_PROTOCOLZloadsZdumps)r
ZstsrkZst_copyZprotorrr�test_copy_pickleXs


z!STObjectTestCase.test_copy_picklecs�dd��tjd��tjd�����fdd������fdd�}|tjd	��|tjd
��|tjd��|tjd��|tjd
��|tjdddd��dS)NcSs0|dkr|S|dkr |dd@Sd|dj�>S)NrEi�rzi����)Z
bit_length)rcrrr�
XXXROUNDUPks
z0STObjectTestCase.test_sizeof.<locals>.XXXROUNDUPZPiiZhP3iP0hcs�|dkrdSd}t|�dko(t|dt�}|rB|t|d�d7}|rR|dd�n
|dd�}|r�|�t|���7}x|D]}|�|�7}q|W|S)NrrErjrjrj)ZlenrFr)ZnodeZresZhasstrZchildrenZchild)rw�nodesize�sizeofchildrenrrryts
z4STObjectTestCase.test_sizeof.<locals>.sizeofchildrencs �j|���|j���dSr)�check_sizeofr)rk)�basesizerxr
ryrr�check_st_sizeof�sz5STObjectTestCase.test_sizeof.<locals>.check_st_sizeofrZz	2 + 3 + 4z	x = 2 + 3rUz# -*- coding: utf-8 -*-rkz2,i�rl)rZcalcobjsize�structZcalcsizerrr)r
r|r)rwr{rxr
ryr�test_sizeofis

zSTObjectTestCase.test_sizeofN)	rurvrwrsrvrrzZcpython_onlyr~rrrrrqs=rqc@seZdZdd�ZdS)�OtherParserCasec
Cs&|jt��tjdd�WdQRXdS)Nr0r)r4rhrrr#rrr�test_two_args_to_expr�sz%OtherParserCase.test_two_args_to_exprN)rurvrwr�rrrrr�srZ__main__)rtrruZunittestrrr}ZtestrZtest.support.script_helperrZTestCaserrxrYrjrqrruZmainrrrrZ<module>s(!:x