diff --git a/crates/engine/src/ai_support/combat_withdrawal.rs b/crates/engine/src/ai_support/combat_withdrawal.rs index ddf1bf8587..7956975b76 100644 --- a/crates/engine/src/ai_support/combat_withdrawal.rs +++ b/crates/engine/src/ai_support/combat_withdrawal.rs @@ -188,7 +188,10 @@ fn is_exact_combat_withdrawal_path(ability: &ResolvedAbility) -> bool { fn single_member( members: &[crate::types::identifiers::ObjectId], ) -> Option { - (members.len() == 1).then_some(members[0]) + let [member] = members else { + return None; + }; + Some(*member) } #[cfg(test)] @@ -298,6 +301,15 @@ mod tests { ) } + #[test] + fn single_member_rejects_empty_and_multi_member_slices() { + let member = ObjectId(1); + + assert_eq!(single_member(&[]), None); + assert_eq!(single_member(&[member]), Some(member)); + assert_eq!(single_member(&[member, ObjectId(2)]), None); + } + #[test] fn direct_target_reports_exact_attacker_fact_without_mutating_state() { let (mut state, source, attacker, blocker) = combat_state();