phase29ao(p51): unify split-scan v0/v1 value-join path
This commit is contained in:
@ -255,6 +255,47 @@ mod tests {
|
||||
assert!(matches!(composed, Some(crate::mir::builder::control_flow::plan::CorePlan::Loop(_))));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn coreloop_v1_rejects_split_scan_without_value_join() {
|
||||
let condition = ASTNode::Literal {
|
||||
value: LiteralValue::Bool(true),
|
||||
span: Span::unknown(),
|
||||
};
|
||||
let facts = LoopFacts {
|
||||
condition_shape: ConditionShape::Unknown,
|
||||
step_shape: StepShape::Unknown,
|
||||
skeleton: SkeletonFacts {
|
||||
kind: SkeletonKind::Loop,
|
||||
},
|
||||
features: LoopFeatureFacts::default(),
|
||||
scan_with_init: None,
|
||||
split_scan: Some(crate::mir::builder::control_flow::plan::facts::loop_facts::SplitScanFacts {
|
||||
s_var: "s".to_string(),
|
||||
sep_var: "sep".to_string(),
|
||||
result_var: "result".to_string(),
|
||||
i_var: "i".to_string(),
|
||||
start_var: "start".to_string(),
|
||||
shape: SplitScanShape::Minimal,
|
||||
}),
|
||||
pattern1_simplewhile: None,
|
||||
pattern3_ifphi: None,
|
||||
pattern4_continue: None,
|
||||
pattern5_infinite_early_exit: None,
|
||||
pattern8_bool_predicate_scan: None,
|
||||
pattern9_accum_const_loop: None,
|
||||
pattern2_break: None,
|
||||
pattern2_loopbodylocal: None,
|
||||
};
|
||||
let canonical = canonicalize_loop_facts(facts);
|
||||
let mut builder = MirBuilder::new();
|
||||
builder.enter_function_for_test("coreloop_v1_split_scan_no_join".to_string());
|
||||
let ctx =
|
||||
LoopPatternContext::new(&condition, &[], "coreloop_v1_split_scan_no_join", false, false);
|
||||
let composed =
|
||||
try_compose_core_loop_v1(&mut builder, &canonical, &ctx).expect("Ok");
|
||||
assert!(composed.is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn coreloop_v1_rejects_split_scan_with_disallowed_exitmap() {
|
||||
let condition = ASTNode::Literal {
|
||||
|
||||
Reference in New Issue
Block a user