pub fn string_compare(a: &[u8], b: &[u8]) -> std::cmp::Ordering {
if a.len() == b.len() {
a.cmp(b)
} else {
a.len().cmp(&b.len())
}
}
pub fn strchr(haystack: &[u8], needle: u8) -> Option<usize> {
haystack.iter().position(|&b| b == needle)
}
pub fn strrchr(haystack: &[u8], needle: u8) -> Option<usize> {
haystack.iter().rposition(|&b| b == needle)
}
pub fn eq_ignore_ascii_case(a: &[u8], b: &[u8]) -> bool {
a.eq_ignore_ascii_case(b)
}
#[cfg(test)]
mod tests {
use std::cmp::Ordering;
use super::*;
#[test]
fn shorter_sorts_first() {
assert_eq!(string_compare(b"a", b"ab"), Ordering::Less);
assert_eq!(string_compare(b"abc", b"ab"), Ordering::Greater);
}
#[test]
fn equal_length_uses_lex_order() {
assert_eq!(string_compare(b"abc", b"abd"), Ordering::Less);
assert_eq!(string_compare(b"abc", b"abc"), Ordering::Equal);
}
#[test]
fn strchr_and_strrchr() {
assert_eq!(strchr(b"hello", b'l'), Some(2));
assert_eq!(strrchr(b"hello", b'l'), Some(3));
assert_eq!(strchr(b"", b'x'), None);
assert_eq!(strrchr(b"", b'x'), None);
}
}