1use std::cmp::Ordering;
4
5pub fn cmp_ascii_case_insensitive(a: &str, b: &str) -> Ordering {
12 a.bytes()
13 .map(|b| b.to_ascii_lowercase())
14 .cmp(b.bytes().map(|b| b.to_ascii_lowercase()))
15}
16
17#[cfg(test)]
18mod tests {
19 use super::*;
20
21 #[test]
22 fn equal_strings() {
23 assert_eq!(
24 cmp_ascii_case_insensitive("hello", "hello"),
25 Ordering::Equal
26 );
27 }
28
29 #[test]
30 fn case_insensitive_equal() {
31 assert_eq!(
32 cmp_ascii_case_insensitive("Hello", "hELLO"),
33 Ordering::Equal
34 );
35 }
36
37 #[test]
38 fn ordering_preserved() {
39 assert_eq!(cmp_ascii_case_insensitive("abc", "def"), Ordering::Less);
40 assert_eq!(cmp_ascii_case_insensitive("DEF", "abc"), Ordering::Greater);
41 }
42
43 #[test]
44 fn prefix_shorter_is_less() {
45 assert_eq!(cmp_ascii_case_insensitive("ab", "abc"), Ordering::Less);
46 }
47}