use {
std::{
borrow::Cow,
collections::HashSet,
},
sub_strs::CainStr,
};
#[test]
fn test_cain_str() {
const FISRT: &str = "FiRsT";
const SECOND: &str = "sEcOnD";
const THIRD: &str = "THIRD";
const FAKE: &str = "third";
const STRS: &[&str] = &[FISRT, SECOND, THIRD, FAKE];
let mut set: HashSet<CainStr> = HashSet::new();
for s in STRS {
let cain_str = CainStr::from(*s);
assert_eq!(cain_str, CainStr::from(s.to_uppercase()));
assert_eq!(cain_str, CainStr::from(s.to_lowercase()));
set.insert(cain_str);
}
let mut vec: Vec<_> = set.into_iter().collect();
vec.sort();
let mut iter = vec.into_iter();
assert_eq!(Cow::from(iter.next().unwrap()), FISRT);
assert_eq!(Cow::from(iter.next().unwrap()), SECOND);
assert!([THIRD, FAKE].contains(&&*Cow::from(iter.next().unwrap())));
assert!(iter.next().is_none());
}