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
16
r1 = int1 < int2 < int3
17
r2 = obj1 < obj2 < obj3
18
r3 = int1 < int2 < obj3
21
r6 = int1 < (int2 == int3) < int4
22
return r1, r2, r3, r4, r5, r6
28
(True, False, True, False, False, True, False)
36
1 <= 1 <= x <= 2 <= 3 > x <= 2 <= 2,
37
1 <= 1 <= x <= 1 <= 1 <= x <= 2,
40
def eq_if_statement(a, b, c):
42
>>> eq_if_statement(1, 2, 3)
44
>>> eq_if_statement(2, 3, 4)
46
>>> eq_if_statement(1, 1, 2)
48
>>> eq_if_statement(1, "not an int", 2)
50
>>> eq_if_statement(2, 1, 1)
52
>>> eq_if_statement(1, 1, 1)
60
def eq_if_statement_semi_optimized(a, int b, int c):
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
66
>>> eq_if_statement_semi_optimized(1, 2, 3)
68
>>> eq_if_statement_semi_optimized(2, 3, 4)
70
>>> eq_if_statement_semi_optimized(1, 1, 2)
72
>>> eq_if_statement_semi_optimized("not an int", 1, 2)
74
>>> eq_if_statement_semi_optimized(2, 1, 1)
76
>>> eq_if_statement_semi_optimized(1, 1, 1)
79
if 1 == a == b == c == 1:
84
def eq_if_statement_semi_optimized2(a, b, c):
86
Here only "b==c" fails to optimize
88
>>> eq_if_statement_semi_optimized2(1, 2, 3)
90
>>> eq_if_statement_semi_optimized2(2, 3, 4)
92
>>> eq_if_statement_semi_optimized2(1, 1, 2)
94
>>> eq_if_statement_semi_optimized2(1, "not an int", 2)
96
>>> eq_if_statement_semi_optimized2(2, 1, 1)
98
>>> eq_if_statement_semi_optimized2(1, 1, 1)
101
if 1 == a == 1 == b == c: