// This file is part of ICU4X. For terms of use, please see the file // called LICENSE at the top level of the ICU4X source tree // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). use zerotrie::ZeroAsciiIgnoreCaseTrie; mod testdata { include!("data/data.rs"); } use testdata::strings_to_litemap; #[test] fn test_ignore_case_coverage() { let litemap = strings_to_litemap(&["", "aBc", "aBcD", "aBce", "aBcF", "aBcghi"]); // Test both construction paths ZeroAsciiIgnoreCaseTrie::try_from(&litemap).unwrap(); let trie = litemap .iter() .map(|(k, v)| (*k, *v)) .collect::>>(); // Test lookup for (k, v) in litemap.iter() { assert_eq!(trie.get(k), Some(*v), "normal: {k:?}"); let k_upper = k .iter() .map(|c| c.to_ascii_uppercase()) .collect::>(); assert_eq!(trie.get(k_upper), Some(*v), "upper: {k:?}"); let k_lower = k .iter() .map(|c| c.to_ascii_lowercase()) .collect::>(); assert_eq!(trie.get(k_lower), Some(*v), "lower: {k:?}"); } // Test mixed-case strings let problematic_strs = &["A", "ab", "abc", "aBcd", "aBcgHi"]; for problematic_str in problematic_strs { let mut litemap = litemap.clone(); litemap.insert(problematic_str.as_bytes(), 100); ZeroAsciiIgnoreCaseTrie::try_from(&litemap).expect_err(problematic_str); } }