mod constant_folding;
mod def_inline;
mod eq;
mod if_rand;
mod list_add;
mod speculative_exec;
mod type_is;
mod types;
use crate::tests::bc::golden::bc_golden_test;
#[test]
fn test_type_is_inlined() {
bc_golden_test(
"opt_type_is_inlined",
r#"
def is_list(x):
return type(x) == type([])
def test(x):
return is_list(x)
"#,
)
}
#[test]
fn test_private_forward_mutable_module_vars_inlined() {
bc_golden_test(
"opt_private_forward_mutable_module_vars_inlined",
r#"
def test():
# Reference to module variable should be replaced with constant
return _private_forward_mutable
_private_forward_mutable = {1: 2}
"#,
);
}
#[test]
fn test_same_module_struct_getattr_inlined() {
bc_golden_test(
"opt_same_module_struct_getattr_inlined",
r#"
def test():
return _s.f
_s = struct(f = 1)
"#,
);
}
#[test]
fn test_list_plus_list() {
bc_golden_test(
"opt_list_plus_list",
r#"
L = [1, 2]
def test():
return L + [1]
"#,
);
}
#[test]
fn test_empty_iterable_optimized_away() {
bc_golden_test(
"opt_empty_iterable_optimized_away",
r#"
L = []
def test():
for x in L:
print(x)
"#,
);
}
#[test]
fn test_unreachable_code_optimized_away() {
bc_golden_test(
"opt_unreachable_code_optimized_away",
r#"
def test():
if True:
return
fail("unreachable")
"#,
);
}
#[test]
fn test_recursion() {
bc_golden_test(
"opt_recursion",
"def test(): return test()",
);
}
#[test]
fn test_mutual_recursion() {
bc_golden_test(
"opt_mutual_recursion",
r#"
def test():
return g()
def g():
return test()
"#,
);
}