mod common;
use crate::common::*;
macro_rules! test {
($sentence:expr, $examples:expr) => {
init_logging();
let executor = make_test_executor();
exec!(executor -> PUSH "messages" "user:1" "chat:1" $sentence);
exec!(executor -> TRIGGER consolidate);
assert_eq!(
exec!(executor -> COUNT "messages" "user:1" "chat:1"),
Ok($sentence.split_ascii_whitespace().count() as u32)
);
for (needle, should_match) in $examples.into_iter() {
assert!(!needle.contains("{"), "Needle shouldn’t contain '{{', make sure you formatted the string correctly.");
let response = exec!(executor -> QUERY "messages" "user:1" needle);
if should_match {
assert_eq!(response, ["chat:1"], "Did not find {needle:?} in {:?}", $sentence);
} else {
assert_eq!(response, vec![] as Vec<&str>, "Found {needle:?} in {:?}", $sentence);
}
}
};
}
const ASTRONOMY_WORDS: &str = "sun moon comet nebula pulsars asteroid satellite spacecraft";
#[test]
#[ignore = "Known issue (FIXME)"]
fn test_search_allows_typos() {
#[rustfmt::skip]
test!(ASTRONOMY_WORDS, [
("sum", false),
("ssun", true), ("noon", true), ("commit", false),
("nzbula", true), ("nzbala", false),
("plusars", true), ("saetllite", true), ("satemmite", false),
("sapcecrzft", true), ]);
}
#[test]
#[ignore = "Not supported yet (FIXME)"]
fn test_search_term_order_insignificant() {
#[rustfmt::skip]
test!(ASTRONOMY_WORDS, [
("satellite pulsars nebula", true),
(&format!("missing {ASTRONOMY_WORDS}"), true),
]);
}
#[test]
#[ignore = "Not supported yet"]
fn test_chinese_typo_correction() {
unimplemented!()
}