/*
==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--
sub-strs
Copyright (C) 2019-2023 Anonymous
There are several releases over multiple years,
they are listed as ranges, such as: "2019-2023".
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see .
::--::--::--::--::--::--::--::--::--::--::--::--::--::--::--::--
*/
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 = 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());
}