diff --git a/src/lib.rs b/src/lib.rs index 4530753..c2f38bc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -92,6 +92,8 @@ impl> Hash for UniCase { #[cfg(test)] mod test { use super::UniCase; + use std::borrow::Cow; + use std::collections::HashMap; use std::hash::{Hash, Hasher, SipHasher}; fn hash(t: &T) -> u64 { @@ -108,4 +110,23 @@ mod test { assert_eq!(a, b); assert_eq!(hash(&a), hash(&b)); } + + #[test] + fn test_borrow_impl() { + let owned: Cow<'static, str> = Cow::Owned(String::from("hElLO")); + let static_borrow: Cow<'static, str> = "Hello".into(); + + let mut map = HashMap::new(); + let val = 42; + map.insert(UniCase(owned), val); + + assert_eq!(map.get(&UniCase(static_borrow)), Some(&val)); + + fn get_shorter<'map, 'key>(map: &'map HashMap>, u32>, s: &'key str) -> Option<&'map u32>{ + let fn_borrow: Cow<'key, str> = s.into(); + map.get::>>(&UniCase(fn_borrow)) + } + + assert_eq!(get_shorter(&map, "hello"), Some(&val)) + } }