#![cfg(any(all(test, feature = "tests-slow"), doc))]
#[allow(dead_code)]
pub(crate) fn edit_distn(s1: &[u8], s2: &[u8]) -> usize {
let mut row = std::vec::Vec::from_iter(0usize..=s2.len());
for (i1, &s1ch) in s1.iter().enumerate() {
let mut prev_l = row[0];
row[0] = i1 + 1;
for (i2, &s2ch) in s2.iter().enumerate() {
let curr_l = row[i2];
let prev_c = row[i2 + 1];
let cost_a = curr_l + 1;
let cost_d = prev_c + 1;
let cost_r = prev_l + if s1ch == s2ch { 0 } else { 2 };
prev_l = prev_c;
row[i2 + 1] = cost_a.min(cost_d.min(cost_r));
}
}
row[s2.len()]
}