Blame tests/run/constant_folding.py

Packit Service 99d393
# coding=utf8
Packit Service 99d393
# mode: run
Packit Service 99d393
# tag: constant_folding
Packit Service 99d393
Packit Service 99d393
import cython
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//UnaryMinusNode",
Packit Service 99d393
    "//UnaryPlusNode",
Packit Service 99d393
)
Packit Service 99d393
def unop_floats():
Packit Service 99d393
    """
Packit Service 99d393
    >>> unop_floats()
Packit Service 99d393
    (False, 2.0, -2.0, False, 2.0, -2.0, -2.0)
Packit Service 99d393
    """
Packit Service 99d393
    not1   = not 2.0
Packit Service 99d393
    plus1  = + 2.0
Packit Service 99d393
    minus1 = - 2.0
Packit Service 99d393
    not3   = not not not 2.0
Packit Service 99d393
    plus3  = +++ 2.0
Packit Service 99d393
    minus3 = --- 2.0
Packit Service 99d393
    mix    = +-++-- 2.0
Packit Service 99d393
    return not1, plus1, minus1, not3, plus3, minus3, mix
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//UnaryMinusNode",
Packit Service 99d393
    "//UnaryPlusNode",
Packit Service 99d393
    "//CoerceToPyTypeNode",
Packit Service 99d393
)
Packit Service 99d393
def unop_py_floats_tuple():
Packit Service 99d393
    """
Packit Service 99d393
    >>> unop_floats()
Packit Service 99d393
    (False, 2.0, -2.0, False, 2.0, -2.0, -2.0)
Packit Service 99d393
    """
Packit Service 99d393
    return (
Packit Service 99d393
        not 2.0,
Packit Service 99d393
        + 2.0,
Packit Service 99d393
        - 2.0,
Packit Service 99d393
        not not not 2.0,
Packit Service 99d393
        +++ 2.0,
Packit Service 99d393
        --- 2.0,
Packit Service 99d393
        +-++-- 2.0)
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//UnaryMinusNode",
Packit Service 99d393
    "//UnaryPlusNode",
Packit Service 99d393
)
Packit Service 99d393
def unop_ints():
Packit Service 99d393
    """
Packit Service 99d393
    >>> unop_ints()
Packit Service 99d393
    (False, 2, -2, False, 2, -2, -2)
Packit Service 99d393
    """
Packit Service 99d393
    not1   = not 2
Packit Service 99d393
    plus1  = + 2
Packit Service 99d393
    minus1 = - 2
Packit Service 99d393
    not3   = not not not 2
Packit Service 99d393
    plus3  = +++ 2
Packit Service 99d393
    minus3 = --- 2
Packit Service 99d393
    mix    = +-++-- 2
Packit Service 99d393
    return not1, plus1, minus1, not3, plus3, minus3, mix
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//UnaryMinusNode",
Packit Service 99d393
    "//UnaryPlusNode",
Packit Service 99d393
    "//NotNode",
Packit Service 99d393
)
Packit Service 99d393
def unop_bool():
Packit Service 99d393
    """
Packit Service 99d393
    >>> unop_bool()
Packit Service 99d393
    (False, 1, -1, False, 1, -1, -1)
Packit Service 99d393
    """
Packit Service 99d393
    not1   = not True
Packit Service 99d393
    plus1  = + True
Packit Service 99d393
    minus1 = - True
Packit Service 99d393
    not3   = not not not True
Packit Service 99d393
    plus3  = +++ True
Packit Service 99d393
    minus3 = --- True
Packit Service 99d393
    mix    = +-++-- True
Packit Service 99d393
    return not1, plus1, minus1, not3, plus3, minus3, mix
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//AddNode",
Packit Service 99d393
    "//SubNode",
Packit Service 99d393
)
Packit Service 99d393
def binop_bool():
Packit Service 99d393
    """
Packit Service 99d393
    >>> binop_bool()
Packit Service 99d393
    (2, 1, 0, True, True, 1, False, 2, 2, -2, False, True, 1, False)
Packit Service 99d393
    """
Packit Service 99d393
    plus1  = True + True
Packit Service 99d393
    pmix1  = True + 0
Packit Service 99d393
    minus1 = True - True
Packit Service 99d393
    and1   = True & True
Packit Service 99d393
    or1    = True | True
Packit Service 99d393
    ormix1 = True | 0
Packit Service 99d393
    xor1   = True ^ True
Packit Service 99d393
    plus3  = False + True + False + True
Packit Service 99d393
    pmix3  = False + True + 0 + True
Packit Service 99d393
    minus3 = False - True - False - True
Packit Service 99d393
    and3   = False & True & False & True
Packit Service 99d393
    or3    = False | True | False | True
Packit Service 99d393
    ormix3 = False | 0 | False | True
Packit Service 99d393
    xor3   = False ^ True ^ False ^ True
Packit Service 99d393
    return plus1, pmix1, minus1, and1, or1, ormix1, xor1, plus3, pmix3, minus3, and3, or3, ormix3, xor3
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//SliceIndexNode",
Packit Service 99d393
)
Packit Service 99d393
def slicing2():
Packit Service 99d393
    """
Packit Service 99d393
    >>> slicing2()
Packit Service 99d393
    ([1, 2, 3, 4], [3, 4], [1, 2, 3, 4], [3, 4], (1, 2, 3, 4), (3, 4), (1, 2, 3, 4), (3, 4))
Packit Service 99d393
    """
Packit Service 99d393
    lst0 = [1, 2, 3, 4][:]
Packit Service 99d393
    lst1 = [1, 2, 3, 4][2:]
Packit Service 99d393
    lst2 = [1, 2, 3, 4][:4]
Packit Service 99d393
    lst3 = [1, 2, 3, 4][2:4]
Packit Service 99d393
Packit Service 99d393
    tpl0 = (1, 2, 3, 4)[:]
Packit Service 99d393
    tpl1 = (1, 2, 3, 4)[2:]
Packit Service 99d393
    tpl2 = (1, 2, 3, 4)[:4]
Packit Service 99d393
    tpl3 = (1, 2, 3, 4)[2:4]
Packit Service 99d393
Packit Service 99d393
    return lst0, lst1, lst2, lst3, tpl0, tpl1, tpl2, tpl3
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//SliceIndexNode",
Packit Service 99d393
)
Packit Service 99d393
def str_slicing2():
Packit Service 99d393
    """
Packit Service 99d393
    >>> a,b,c,d = str_slicing2()
Packit Service 99d393
    >>> a == 'abc\\xE9def'[:]
Packit Service 99d393
    True
Packit Service 99d393
    >>> b == 'abc\\xE9def'[2:]
Packit Service 99d393
    True
Packit Service 99d393
    >>> c == 'abc\\xE9def'[:4]
Packit Service 99d393
    True
Packit Service 99d393
    >>> d == 'abc\\xE9def'[2:4]
Packit Service 99d393
    True
Packit Service 99d393
    """
Packit Service 99d393
    str0 = 'abc\xE9def'[:]
Packit Service 99d393
    str1 = 'abc\xE9def'[2:]
Packit Service 99d393
    str2 = 'abc\xE9def'[:4]
Packit Service 99d393
    str3 = 'abc\xE9def'[2:4]
Packit Service 99d393
Packit Service 99d393
    return str0, str1, str2, str3
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//IfStatNode",
Packit Service 99d393
)
Packit Service 99d393
def str_in_and_not_in():
Packit Service 99d393
    """
Packit Service 99d393
    >>> str_in_and_not_in()
Packit Service 99d393
    True
Packit Service 99d393
    """
Packit Service 99d393
    if 'a' in 'abc' and 'b' in 'abc' and 'c' in 'abc' and 'd' not in 'abc': return True
Packit Service 99d393
    else: return False
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//WhileStatNode",
Packit Service 99d393
)
Packit Service 99d393
def while_false():
Packit Service 99d393
    """
Packit Service 99d393
    >>> while_false()
Packit Service 99d393
    """
Packit Service 99d393
    while 1 == 0:
Packit Service 99d393
        return False
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//WhileStatNode",
Packit Service 99d393
    )
Packit Service 99d393
def while_false_else():
Packit Service 99d393
    """
Packit Service 99d393
    >>> while_false_else()
Packit Service 99d393
    True
Packit Service 99d393
    """
Packit Service 99d393
    while 1 == 0:
Packit Service 99d393
        return False
Packit Service 99d393
    else:
Packit Service 99d393
        return True
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//WhileStatNode//PrintStatNode",
Packit Service 99d393
    "//WhileStatNode//PrimaryCmpNode",
Packit Service 99d393
    "//WhileStatNode/BoolNode",
Packit Service 99d393
    "//WhileStatNode/IntNode",
Packit Service 99d393
)
Packit Service 99d393
@cython.test_assert_path_exists(
Packit Service 99d393
    "//WhileStatNode",
Packit Service 99d393
)
Packit Service 99d393
def while_true():
Packit Service 99d393
    """
Packit Service 99d393
    >>> while_true()
Packit Service 99d393
    True
Packit Service 99d393
    """
Packit Service 99d393
    while 1 == 1:
Packit Service 99d393
        return True
Packit Service 99d393
    else:
Packit Service 99d393
        print("FAIL")
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//ForInStatNode",
Packit Service 99d393
)
Packit Service 99d393
def for_in_empty():
Packit Service 99d393
    """
Packit Service 99d393
    >>> for_in_empty()
Packit Service 99d393
    """
Packit Service 99d393
    for i in []:
Packit Service 99d393
        print("LOOP")
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//ForInStatNode",
Packit Service 99d393
)
Packit Service 99d393
def for_in_empty_else():
Packit Service 99d393
    """
Packit Service 99d393
    >>> for_in_empty_else()
Packit Service 99d393
    True
Packit Service 99d393
    """
Packit Service 99d393
    for i in []:
Packit Service 99d393
        print("LOOP")
Packit Service 99d393
    else:
Packit Service 99d393
        return True
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//ComprehensionNode",
Packit Service 99d393
    "//ForInStatNode",
Packit Service 99d393
)
Packit Service 99d393
@cython.test_assert_path_exists(
Packit Service 99d393
    "//ListNode",
Packit Service 99d393
)
Packit Service 99d393
def for_in_empty_listcomp():
Packit Service 99d393
    """
Packit Service 99d393
    >>> for_in_empty_listcomp()
Packit Service 99d393
    []
Packit Service 99d393
    """
Packit Service 99d393
    return [i for i in []]
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//ComprehensionNode",
Packit Service 99d393
    "//ForInStatNode",
Packit Service 99d393
)
Packit Service 99d393
@cython.test_assert_path_exists(
Packit Service 99d393
    "//ListNode",
Packit Service 99d393
)
Packit Service 99d393
def for_in_empty_nested_listcomp():
Packit Service 99d393
    """
Packit Service 99d393
    >>> for_in_empty_nested_listcomp()
Packit Service 99d393
    []
Packit Service 99d393
    """
Packit Service 99d393
    return [x for _ in [] for x in [1, 2, 3]]
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//ForInStatNode//ForInStatNode",
Packit Service 99d393
)
Packit Service 99d393
@cython.test_assert_path_exists(
Packit Service 99d393
    "//ForInStatNode",
Packit Service 99d393
    "//ComprehensionNode",
Packit Service 99d393
)
Packit Service 99d393
def for_in_nested_listcomp():
Packit Service 99d393
    """
Packit Service 99d393
    >>> for_in_nested_listcomp()
Packit Service 99d393
    []
Packit Service 99d393
    """
Packit Service 99d393
    return [x for x in [1, 2, 3] for _ in []]
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//MulNode",
Packit Service 99d393
)
Packit Service 99d393
def mult_empty_list():
Packit Service 99d393
    """
Packit Service 99d393
    >>> mult_empty_list()
Packit Service 99d393
    []
Packit Service 99d393
    """
Packit Service 99d393
    return 5 * [] * 100
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//MulNode",
Packit Service 99d393
)
Packit Service 99d393
def mult_list_int_int():
Packit Service 99d393
    """
Packit Service 99d393
    >>> mult_list_int_int()
Packit Service 99d393
    [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
Packit Service 99d393
    """
Packit Service 99d393
    return [1, 2] * 2 * 3
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//MulNode",
Packit Service 99d393
)
Packit Service 99d393
def mult_int_list_int():
Packit Service 99d393
    """
Packit Service 99d393
    >>> mult_int_list_int()
Packit Service 99d393
    [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
Packit Service 99d393
    """
Packit Service 99d393
    return 3 * [1, 2] * 2
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//MulNode",
Packit Service 99d393
    "//ListNode//IntNode",
Packit Service 99d393
)
Packit Service 99d393
def neg_mult_list():
Packit Service 99d393
    """
Packit Service 99d393
    >>> neg_mult_list()
Packit Service 99d393
    []
Packit Service 99d393
    """
Packit Service 99d393
    return -5 * [1, 2] * -100
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//MulNode",
Packit Service 99d393
    "//ListNode//IntNode",
Packit Service 99d393
)
Packit Service 99d393
def zero_mult_list():
Packit Service 99d393
    """
Packit Service 99d393
    >>> zero_mult_list()
Packit Service 99d393
    []
Packit Service 99d393
    """
Packit Service 99d393
    return 0 * [1, 2] * 0
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_assert_path_exists(
Packit Service 99d393
    "//BoolNode",
Packit Service 99d393
)
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//PrimaryCmpNode",
Packit Service 99d393
    "//MulNode",
Packit Service 99d393
    "//ListNode//IntNode",
Packit Service 99d393
)
Packit Service 99d393
def in_mult_list():
Packit Service 99d393
    """
Packit Service 99d393
    >>> in_mult_list()
Packit Service 99d393
    False
Packit Service 99d393
    """
Packit Service 99d393
    return 5 in 100 * [1, 2] * 0
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_assert_path_exists(
Packit Service 99d393
    "//BoolNode",
Packit Service 99d393
)
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//PrimaryCmpNode",
Packit Service 99d393
    "//MulNode",
Packit Service 99d393
    "//ListNode//IntNode",
Packit Service 99d393
)
Packit Service 99d393
def not_in_mult_list():
Packit Service 99d393
    """
Packit Service 99d393
    >>> not_in_mult_list()
Packit Service 99d393
    True
Packit Service 99d393
    """
Packit Service 99d393
    return 5 not in 100 * [1, 2] * 0
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_assert_path_exists(
Packit Service 99d393
    "//BoolNode",
Packit Service 99d393
)
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    "//PrimaryCmpNode",
Packit Service 99d393
    "//MulNode",
Packit Service 99d393
    "//ListNode//IntNode",
Packit Service 99d393
)
Packit Service 99d393
def combined():
Packit Service 99d393
    """
Packit Service 99d393
    >>> combined()
Packit Service 99d393
    True
Packit Service 99d393
    """
Packit Service 99d393
    return 5 in 100 * [1, 2] * 0  or  5 not in 100 * [] * 10
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_assert_path_exists(
Packit Service 99d393
    '//IntNode[@value = "2"]',
Packit Service 99d393
    '//IntNode[@value = "4"]',
Packit Service 99d393
    '//IntNode[@value = "5"]',
Packit Service 99d393
    '//IntNode[@value = "7"]',
Packit Service 99d393
    '//BoolBinopNode//PrimaryCmpNode',
Packit Service 99d393
    '//BoolBinopNode[.//PrimaryCmpNode//IntNode[@value = "4"] and .//PrimaryCmpNode//IntNode[@value = "5"]]',
Packit Service 99d393
    '//PrimaryCmpNode[.//IntNode[@value = "2"] and .//IntNode[@value = "4"]]',
Packit Service 99d393
    '//PrimaryCmpNode[.//IntNode[@value = "5"] and .//IntNode[@value = "7"]]',
Packit Service 99d393
)
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    '//IntNode[@value = "1"]',
Packit Service 99d393
    '//IntNode[@value = "8"]',
Packit Service 99d393
    '//PrimaryCmpNode[.//IntNode[@value = "4"] and .//IntNode[@value = "5"]]',
Packit Service 99d393
    '//PrimaryCmpNode[.//IntNode[@value = "2"] and .//IntNode[@value = "7"]]',
Packit Service 99d393
    '//BoolNode',
Packit Service 99d393
)
Packit Service 99d393
def cascaded_cmp_with_partial_constants(a, b):
Packit Service 99d393
    """
Packit Service 99d393
    >>> cascaded_cmp_with_partial_constants(3, 6)
Packit Service 99d393
    True
Packit Service 99d393
    >>> cascaded_cmp_with_partial_constants(1, 6)
Packit Service 99d393
    False
Packit Service 99d393
    >>> cascaded_cmp_with_partial_constants(4, 6)
Packit Service 99d393
    False
Packit Service 99d393
    >>> cascaded_cmp_with_partial_constants(3, 7)
Packit Service 99d393
    False
Packit Service 99d393
    >>> cascaded_cmp_with_partial_constants(3, 6)
Packit Service 99d393
    True
Packit Service 99d393
    """
Packit Service 99d393
    return 1 < 2 < a < 4 < 5 < b < 7 < 8
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_assert_path_exists(
Packit Service 99d393
    '//IntNode[@value = "2"]',
Packit Service 99d393
    '//IntNode[@value = "4"]',
Packit Service 99d393
    '//IntNode[@value = "5"]',
Packit Service 99d393
    '//IntNode[@value = "7"]',
Packit Service 99d393
    '//BoolBinopNode',
Packit Service 99d393
    '//SingleAssignmentNode//BoolBinopNode',
Packit Service 99d393
    '//SingleAssignmentNode//BoolBinopNode//NameNode[@name = "a"]',
Packit Service 99d393
    '//SingleAssignmentNode//BoolBinopNode//NameNode[@name = "b"]',
Packit Service 99d393
    '//BoolBinopNode[.//PrimaryCmpNode//IntNode[@value = "4"] and .//PrimaryCmpNode//IntNode[@value = "5"]]',
Packit Service 99d393
    '//BoolNode[@value = False]',
Packit Service 99d393
)
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    '//SingleAssignmentNode//NameNode[@name = "c"]',
Packit Service 99d393
    '//IntNode[@value = "1"]',
Packit Service 99d393
    '//PrimaryCmpNode[.//IntNode[@value = "4"] and .//IntNode[@value = "5"]]',
Packit Service 99d393
    '//PrimaryCmpNode[.//IntNode[@value = "2"] and .//IntNode[@value = "7"]]',
Packit Service 99d393
    '//BoolNode[@value = True]',
Packit Service 99d393
)
Packit Service 99d393
def cascaded_cmp_with_partial_constants_and_false_end(a, b, c):
Packit Service 99d393
    """
Packit Service 99d393
    >>> cascaded_cmp_with_partial_constants_and_false_end(3, 6, 8)
Packit Service 99d393
    False
Packit Service 99d393
    >>> cascaded_cmp_with_partial_constants_and_false_end(1, 6, 8)
Packit Service 99d393
    False
Packit Service 99d393
    >>> cascaded_cmp_with_partial_constants_and_false_end(4, 6, 8)
Packit Service 99d393
    False
Packit Service 99d393
    >>> cascaded_cmp_with_partial_constants_and_false_end(3, 7, 8)
Packit Service 99d393
    False
Packit Service 99d393
    """
Packit Service 99d393
    x = 1 < 2 < a < 4 < 5 < b < 7 < 7 < c
Packit Service 99d393
    return x
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.test_assert_path_exists(
Packit Service 99d393
    '//PrimaryCmpNode',
Packit Service 99d393
    '//PrimaryCmpNode//IntNode',
Packit Service 99d393
    '//PrimaryCmpNode//IntNode[@value = "0"]',
Packit Service 99d393
    '//PrimaryCmpNode//IntNode[@value = "4294967296"]',
Packit Service 99d393
)
Packit Service 99d393
@cython.test_fail_if_path_exists(
Packit Service 99d393
    '//PrimaryCmpNode//IntBinopNode',
Packit Service 99d393
    '//PrimaryCmpNode//IntNode[@value = "1"]',
Packit Service 99d393
    '//PrimaryCmpNode//IntNode[@value = "32"]',
Packit Service 99d393
)
Packit Service 99d393
def const_in_binop(v):
Packit Service 99d393
    """
Packit Service 99d393
    >>> const_in_binop(-1)
Packit Service 99d393
    1
Packit Service 99d393
    >>> const_in_binop(0)
Packit Service 99d393
    0
Packit Service 99d393
    >>> const_in_binop(1 << 32)
Packit Service 99d393
    1
Packit Service 99d393
    >>> const_in_binop(1 << 32 - 1)
Packit Service 99d393
    0
Packit Service 99d393
    """
Packit Service 99d393
    if v < 0 or v >= (1 << 32):
Packit Service 99d393
        return 1
Packit Service 99d393
    else:
Packit Service 99d393
        return 0