cython

Форк
0
/
cascmp.pyx 
104 строки · 2.4 Кб
1
# mode: run
2
# tag: cascade, compare
3

4
def ints_and_objects():
5
    """
6
    >>> ints_and_objects()
7
    (0, 1, 0, 1, 1, 0)
8
    """
9
    cdef int int1=0, int2=0, int3=0, int4=0
10
    cdef int r1, r2, r3, r4, r5, r6
11
    cdef object obj1, obj2, obj3, obj4
12
    obj1 = 1
13
    obj2 = 2
14
    obj3 = 3
15
    obj4 = 4
16
    r1 = int1 < int2 < int3
17
    r2 = obj1 < obj2 < obj3
18
    r3 = int1 < int2 < obj3
19
    r4 = obj1 < 2 < 3
20
    r5 = obj1 < 2 < 3 < 4
21
    r6 = int1 < (int2 == int3) < int4
22
    return r1, r2, r3, r4, r5, r6
23

24

25
def const_cascade(x):
26
    """
27
    >>> const_cascade(2)
28
    (True, False, True, False, False, True, False)
29
    """
30
    return (
31
        0 <= 1,
32
        1 <= 0,
33
        1 <= 1 <= 2,
34
        1 <= 0 < 1,
35
        1 <= 1 <= 0,
36
        1 <= 1 <= x <= 2 <= 3 > x <= 2 <= 2,
37
        1 <= 1 <= x <= 1 <= 1 <= x <= 2,
38
    )
39

40
def eq_if_statement(a, b, c):
41
    """
42
    >>> eq_if_statement(1, 2, 3)
43
    False
44
    >>> eq_if_statement(2, 3, 4)
45
    False
46
    >>> eq_if_statement(1, 1, 2)
47
    False
48
    >>> eq_if_statement(1, "not an int", 2)
49
    False
50
    >>> eq_if_statement(2, 1, 1)
51
    False
52
    >>> eq_if_statement(1, 1, 1)
53
    True
54
    """
55
    if 1 == a == b == c:
56
        return True
57
    else:
58
        return False
59

60
def eq_if_statement_semi_optimized(a, int b, int c):
61
    """
62
    Some but not all of the cascade ends up optimized
63
    (probably not as much as should be). The test is mostly
64
    that it keeps the types consistent throughout
65

66
    >>> eq_if_statement_semi_optimized(1, 2, 3)
67
    False
68
    >>> eq_if_statement_semi_optimized(2, 3, 4)
69
    False
70
    >>> eq_if_statement_semi_optimized(1, 1, 2)
71
    False
72
    >>> eq_if_statement_semi_optimized("not an int", 1, 2)
73
    False
74
    >>> eq_if_statement_semi_optimized(2, 1, 1)
75
    False
76
    >>> eq_if_statement_semi_optimized(1, 1, 1)
77
    True
78
    """
79
    if 1 == a == b == c == 1:
80
        return True
81
    else:
82
        return False
83

84
def eq_if_statement_semi_optimized2(a, b, c):
85
    """
86
    Here only "b==c" fails to optimize
87

88
    >>> eq_if_statement_semi_optimized2(1, 2, 3)
89
    False
90
    >>> eq_if_statement_semi_optimized2(2, 3, 4)
91
    False
92
    >>> eq_if_statement_semi_optimized2(1, 1, 2)
93
    False
94
    >>> eq_if_statement_semi_optimized2(1, "not an int", 2)
95
    False
96
    >>> eq_if_statement_semi_optimized2(2, 1, 1)
97
    False
98
    >>> eq_if_statement_semi_optimized2(1, 1, 1)
99
    True
100
    """
101
    if 1 == a == 1 == b == c:
102
        return True
103
    else:
104
        return False
105

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.