#[test]
fn simple() {
use crate::simple::internal::string_keywords::SplitContext;
use crate::simple::{AutocompleteType, Indexable, SearchIndex, SearchType};
use kstring::KString;
#[derive(Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)]
struct MyStruct {
title: String,
year: u16,
body: String,
}
impl Indexable for MyStruct {
fn strings(&self) -> Vec<String> {
vec![
self.title.clone(),
self.year.to_string(),
self.body.clone(),
]
}
}
let my_vec = vec![
MyStruct {
title: "Harold Godwinson".to_string(),
year: 1066,
body: "Last crowned Anglo-Saxon king of England.".to_string(),
},
MyStruct {
title: "Edgar Ætheling".to_string(),
year: 1066,
body: "Last male member of the royal house of Cerdic of Wessex.".to_string(),
},
MyStruct {
title: "William the Conqueror".to_string(),
year: 1066,
body: "First Norman monarch of England.".to_string(),
},
MyStruct {
title: "William Rufus".to_string(),
year: 1087,
body: "Third son of William the Conqueror.".to_string(),
},
MyStruct {
title: "Henry Beauclerc".to_string(),
year: 1100,
body: "Fourth son of William the Conqueror.".to_string(),
},
];
let mut search_index: SearchIndex<usize> = SearchIndex::default();
let string_keywords: Vec<KString> = search_index.string_keywords(
"All is not lost, the unconquerable will, and study of revenge, \
immortal hate, and the courage never to submit or yield.",
SplitContext::Indexing,
);
assert_eq!(string_keywords,
[ "all", "is", "not", "lost", "unconquerable", "will", "study",
"revenge", "immortal", "hate", "courage", "never", "submit", "yield" ]
);
let string_keywords: Vec<KString> = search_index.string_keywords(
"He prayeth best, who loveth best All things both great and small; For \
the dear God who loveth us, He made and loveth all.",
SplitContext::Searching,
);
assert_eq!(string_keywords,
[ "he", "prayeth", "best", "who", "loveth", "best", "all", "things",
"both", "great", "small", "dear", "god", "who", "loveth", "us", "he",
"made", "loveth", "all" ]
);
let string_keywords: Vec<KString> = search_index.string_keywords(
"Digby was a floccinaucinihilipilificator at heart—which is an \
eight-dollar word meaning a joker who does not believe in anything he \
can't bite.",
SplitContext::Indexing,
);
assert_eq!(string_keywords,
[ "digby", "was", "heart", "which", "is", "eight", "dollar", "word",
"meaning", "joker", "who", "does", "not", "believe", "anything", "he",
"can't", "bite" ]
);
my_vec
.iter()
.enumerate()
.for_each(|(index, element)|
search_index.insert(&index, element)
);
let search_results = search_index.search("third william");
assert_eq!(search_results, vec![&3]);
let search_results = search_index.search_type(&SearchType::Keyword, "Wessex");
assert_eq!(search_results, vec![&1]);
let search_results = search_index.search_type(&SearchType::Or, "last Wessex");
assert_eq!(search_results, vec![&1, &0]);
let search_results = search_index.search_type(&SearchType::Or, "last England");
assert_eq!(search_results, vec![&0, &1, &2]);
let search_results = search_index.search_type(&SearchType::And, "Conqueror third");
assert_eq!(search_results, vec![&3]);
let search_results = search_index.search_type(&SearchType::Live, "Last m");
assert_eq!(search_results, vec![&1]);
let search_results = search_index.search_type(&SearchType::Live, "1066 Harry");
assert_eq!(search_results, vec![&0]);
let autocomplete_options = search_index.autocomplete_type(&AutocompleteType::Keyword, "E");
assert_eq!(autocomplete_options, vec!["edgar".to_string(), "edgar ætheling".to_string(), "england".to_string()]);
let autocomplete_options = search_index.autocomplete_type(&AutocompleteType::Global, "1100 e");
assert_eq!(autocomplete_options, vec!["1100 edgar".to_string(), "1100 edgar ætheling".to_string(), "1100 england".to_string()]);
let autocomplete_options = search_index.autocomplete_type(&AutocompleteType::Global, "1100 Englelund");
assert_eq!(autocomplete_options, vec!["1100 england".to_string()]);
let autocomplete_options = search_index.autocomplete_type(&AutocompleteType::Context, "1087 W");
assert_eq!(autocomplete_options, vec!["1087 william".to_string(), "1087 william rufus".to_string()]);
let autocomplete_options = search_index.autocomplete_type(&AutocompleteType::Context, "1087 Willy");
assert_eq!(autocomplete_options, vec!["1087 william".to_string(), "1087 william rufus".to_string()]);
let autocomplete_options = search_index.autocomplete_type(&AutocompleteType::Context, "108");
assert_eq!(autocomplete_options, vec!["1087".to_string()]);
let similar_keyword = search_index.strsim_global_keyword(&"Willy".to_lowercase());
assert_eq!(similar_keyword, Some(&KString::from_ref("william")));
let similar_autocompletions = search_index.strsim_global_autocomplete(&"Normy".to_lowercase());
let similar_autocompletions_vec: Vec<&KString> = similar_autocompletions.into_iter().map(|(keyword, _keys)| keyword).collect();
assert_eq!(similar_autocompletions_vec, vec![&"norman".to_string()]);
let my_vec: Vec<&str> = vec![
"Vopnafjarðarhreppur", "Weapon Fjord Municipality", "Annerveenschekanaal", "Channel through the peat of Annen", "Cadibarrawirracanna", "The stars were dancing", "Newtownmountkennedy", "A new town near Mt. Kennedy", "Cottonshopeburnfoot", "The end of the Cottonshope Burn", "Nyugotszenterzsébet", "Western St. Elizabeth", "Balatonszentgyörgy", "St. George by Balaton", "Kirkjubæjarklaustur", "Church farm monastery", "Jászalsószentgyörgy", "Lower St. George in Jászság", "Krammerjachtensluis", "Lock on the river Krammer of the hunt", ]; let mut search_index: SearchIndex<usize> = SearchIndex::default();
my_vec
.iter()
.enumerate()
.for_each(|(index, element)|
search_index.insert(&index, element)
);
let search_results = search_index.search_type(&SearchType::Keyword, "Cottonshope");
assert_eq!(search_results, vec![&9]);
let search_results = search_index.search_type(&SearchType::Or, "George Elizabeth");
assert_eq!(search_results, vec![&11, &13, &17]);
let search_results = search_index.search_type(&SearchType::And, "George Jászság");
assert_eq!(search_results, vec![&17]);
let search_results = search_index.search_type(&SearchType::Live, "Geo");
assert_eq!(search_results, vec![&13, &17]);
let search_results = search_index.search_type(&SearchType::Live, "rivers");
assert_eq!(search_results, vec![&19]);
let search_results = search_index.search_type(&SearchType::Live, "peet of Annan");
assert_eq!(search_results, vec![&3]);
let autocomplete_options = search_index.autocomplete_type(&AutocompleteType::Keyword, "Chan");
assert_eq!(autocomplete_options, vec!["channel".to_string()]);
let autocomplete_options = search_index.autocomplete_type(&AutocompleteType::Global, "Lo");
assert_eq!(autocomplete_options, vec!["lock".to_string(), "lower".to_string()]);
let autocomplete_options = search_index.autocomplete_type(&AutocompleteType::Context, "Krammer Lo");
assert_eq!(autocomplete_options, vec!["krammer lock".to_string()]);
let autocomplete_options = search_index.autocomplete_type(&AutocompleteType::Context, "stars are dancers");
assert_eq!(autocomplete_options, vec!["stars are dancing".to_string()]);
}