pub fn n_backticks_to_wrap_codespan(
character: char,
text: &str,
) -> usize {
let mut in_a_rows: Vec<usize> = vec![];
let mut current_in_a_row = 0;
for c in text.chars() {
if c == character {
current_in_a_row += 1;
} else if current_in_a_row > 0 {
if !in_a_rows.contains(¤t_in_a_row) {
in_a_rows.push(current_in_a_row)
}
current_in_a_row = 0;
}
}
if current_in_a_row > 0 && !in_a_rows.contains(¤t_in_a_row) {
in_a_rows.push(current_in_a_row)
}
let mut result = 0;
if in_a_rows.len() > 0 {
let max = in_a_rows.iter().max().unwrap() + 2;
for n in 1..max {
if !in_a_rows.contains(&n) {
result = n;
break;
}
}
}
result
}
#[cfg(test)]
mod tests {
use super::*;
use rstest::rstest;
#[rstest]
#[case('c', &"c tt ccc cccc", 2)]
#[case('c', &"c cc ttt cccc", 3)]
#[case('c', &"t cc ttt cccc", 1)]
#[case('c', &"c cc ccc tttt", 4)]
fn n_backticks_to_wrap_codespan_test(
#[case] character: char,
#[case] text: &str,
#[case] expected: usize,
) {
assert_eq!(
n_backticks_to_wrap_codespan(character, text),
expected,
);
}
}