use crate::eval::{bc::opcode::BcOpcode, tests::bc::test_instrs};
#[test]
fn test_no_loop_if_top_collection_is_empty() {
test_instrs(
&[BcOpcode::ListNew, BcOpcode::Return],
"def test(): return [x for x in []]",
);
}
#[test]
fn test_no_loop_if_top_collection_is_empty_on_freeze() {
test_instrs(
&[BcOpcode::ListNew, BcOpcode::Return],
"def test(): return [x for x in D]\nD = {}",
);
}
#[test]
fn test_if_true_clause() {
test_instrs(
&[
BcOpcode::ListNew,
BcOpcode::LoadLocal,
BcOpcode::ForLoop,
BcOpcode::StoreLocal,
BcOpcode::LoadLocal,
BcOpcode::ComprListAppend,
BcOpcode::Continue,
BcOpcode::Return,
],
"def test(y): return [x for x in y if True]",
);
}
#[test]
fn test_if_true_clause_on_freeze() {
test_instrs(
&[
BcOpcode::ListNew,
BcOpcode::LoadLocal,
BcOpcode::ForLoop,
BcOpcode::StoreLocal,
BcOpcode::LoadLocal,
BcOpcode::ComprListAppend,
BcOpcode::Continue,
BcOpcode::Return,
],
"def test(y): return [x for x in y if C]\nC = False\nC = True",
);
}