37 lines
1.1 KiB
Rust
37 lines
1.1 KiB
Rust
#[inline]
|
|
pub fn parse(src: &str) -> usize {
|
|
let end = memchr::memchr(b'\n', src.as_bytes())
|
|
.map(|i| i + 1)
|
|
.unwrap_or_else(|| src.len());
|
|
let rules = &src[0..end].trim();
|
|
if rules.len() >= 5 && rules.chars().all(|c| c == '-') {
|
|
end
|
|
} else {
|
|
0
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
#[test]
|
|
fn parse() {
|
|
use super::parse;
|
|
|
|
assert_eq!(parse("-----"), "-----".len());
|
|
assert_eq!(parse("--------"), "--------".len());
|
|
assert_eq!(parse(" -----"), " -----".len());
|
|
assert_eq!(parse("\t\t-----"), "\t\t-----".len());
|
|
assert_eq!(parse("\t\t-----\n"), "\t\t-----\n".len());
|
|
assert_eq!(parse("\t\t----- \n"), "\t\t----- \n".len());
|
|
assert_eq!(parse(""), 0);
|
|
assert_eq!(parse("----"), 0);
|
|
assert_eq!(parse(" ----"), 0);
|
|
assert_eq!(parse(" 0----"), 0);
|
|
assert_eq!(parse("0 ----"), 0);
|
|
assert_eq!(parse("0------"), 0);
|
|
assert_eq!(parse("----0----"), 0);
|
|
assert_eq!(parse("\t\t----"), 0);
|
|
assert_eq!(parse("------0"), 0);
|
|
assert_eq!(parse("----- 0"), 0);
|
|
}
|
|
}
|