Share small-stack setup across complete rename test cases

This commit is contained in:
2026-09-24 16:32:33 -07:00
parent 70c20c39de
commit f1c095654a
2 changed files with 35 additions and 37 deletions
@@ -497,43 +497,39 @@ fn deep_and_wide_equality_and_late_refusal_drop_on_small_stack() {
"calculation c \"C\" id \"{}\" {{ result {result}; body {expression}; }}",
id(2)
));
let source = authored(&bundle);
assert_eq!(source.indexed.resolved.expressions.len(), nodes);
let original = source.project().clone();
drop(source.plan_rename(&original).unwrap());
// Keep the complete admission pipeline on this worker, without
// nesting it inside the general rejection assertion helper.
let mut desired = original.clone();
desired.definitions.get_mut(&id(2)).unwrap().alias = "p".into();
let source = authored(&bundle);
let failure = match source.plan_rename(&desired) {
Ok(_) => panic!("colliding rename accepted"),
Err(failure) => failure,
};
assert_eq!(failure.diagnostics.len(), 1);
assert_eq!(
failure.diagnostics[0].diagnostic.message,
"Rename aliases collide in their final namespace."
);
drop(failure);
drop(desired);
let mut desired = original.clone();
calculation(&mut desired, 2).body = a::Binding::Unbound;
let source = authored(&bundle);
let failure = match source.plan_rename(&desired) {
Ok(_) => panic!("non-name mutation accepted"),
Err(failure) => failure,
};
assert_eq!(failure.diagnostics.len(), 1);
assert_eq!(
failure.diagnostics[0].diagnostic.message,
"Rename target changes non-name project semantics."
);
drop(failure);
drop(desired);
drop(original);
// One shared source/desired/result layout exercises all cases
// without separate large debug temporaries for each branch.
for mode in 0..3 {
let source = authored(&bundle);
assert_eq!(source.indexed.resolved.expressions.len(), nodes);
let mut desired = source.project().clone();
match mode {
0 => {}
1 => desired.definitions.get_mut(&id(2)).unwrap().alias = "p".into(),
_ => calculation(&mut desired, 2).body = a::Binding::Unbound,
}
let result = source.plan_rename(&desired);
match result {
Ok(plan) => {
assert_eq!(mode, 0, "mutation unexpectedly accepted");
drop(plan);
}
Err(failure) => {
assert_ne!(mode, 0, "unchanged target unexpectedly refused");
assert_eq!(failure.diagnostics.len(), 1);
assert_eq!(
failure.diagnostics[0].diagnostic.message,
if mode == 1 {
"Rename aliases collide in their final namespace."
} else {
"Rename target changes non-name project semantics."
}
);
drop(failure);
}
}
drop(desired);
}
}
})
.unwrap()