use fuzzy_regex::{FuzzyRegex, FuzzyRegexBuilder};
#[test]
fn fuzz_compile() {
let patterns = [
"hello",
"(?:hello){e<=1}",
"(?:hello){e<=2}",
"[a-z]+",
"\\d+",
"\\w+",
"(?:a){e<=1}",
"(?:ab){e<=1}",
"(?:test){e<=1}",
"(?m)^hello$",
"(?:hello|world)",
];
for pattern in patterns {
let _ = FuzzyRegex::new(pattern);
}
}
#[test]
fn fuzz_is_match() {
let patterns = [
"hello",
"(?:hello){e<=1}",
"(?:hello){e<=2}",
"[a-z]+",
"\\d+",
"(?:test){e<=1}",
];
let texts = [
"hello",
"helo",
"helloo",
"hallo",
"world",
"test",
"",
" ",
"hello world",
];
for pattern in patterns {
if let Ok(re) = FuzzyRegex::new(pattern) {
for text in texts {
let _ = re.is_match(text);
}
}
}
}
#[test]
fn fuzz_find() {
let patterns = ["hello", "(?:hello){e<=1}", "(?:test){e<=1}", "[a-z]+"];
let texts = ["hello", "helo", "test string", "", " hello "];
for pattern in patterns {
if let Ok(re) = FuzzyRegex::new(pattern) {
for text in texts {
let _ = re.find(text);
let _ = re.find_iter(text).collect::<Vec<_>>();
}
}
}
}
#[test]
fn fuzz_captures() {
let patterns = ["(hello)", "(\\w+)@(\\w+)", "(?P<name>\\w+)"];
let texts = ["hello", "test@example", ""];
for pattern in patterns {
if let Ok(re) = FuzzyRegex::new(pattern) {
for text in texts {
let _ = re.captures(text);
}
}
}
}
#[test]
fn fuzz_builder() {
let options = vec![
FuzzyRegexBuilder::new("test"),
FuzzyRegexBuilder::new("test").case_insensitive(true),
FuzzyRegexBuilder::new("test").multi_line(true),
FuzzyRegexBuilder::new("test").dot_all(true),
FuzzyRegexBuilder::new("test").similarity(0.5),
];
for builder in options {
let _ = builder.build();
}
}
#[test]
fn test_partial_matching() {
use fuzzy_regex::FuzzyRegexBuilder;
let re = FuzzyRegexBuilder::new("(?:hello){e<=1}")
.partial(false) .build()
.unwrap();
let m = re.find("hello").unwrap();
assert!(!m.partial());
let re2 = FuzzyRegexBuilder::new("(?:hello){e<=1}")
.partial(true)
.build()
.unwrap();
let m2 = re2.find("hello").unwrap();
assert!(m2.partial());
let m3 = re2.find("say hello world").unwrap();
assert!(!m3.partial());
let m4 = re2.find("hallo").unwrap(); assert!(m4.partial());
}
#[test]
fn fuzz_edge_cases() {
let _ = FuzzyRegex::new("");
let _ = FuzzyRegex::new("a");
let _ = FuzzyRegex::new("(?:a){e<=1}");
let long_pattern = "a".repeat(1000);
let _ = FuzzyRegex::new(&long_pattern);
let long_text = "hello world ".repeat(100);
if let Ok(re) = FuzzyRegex::new("hello") {
let _ = re.is_match(&long_text);
let _ = re.find(&long_text);
}
let unicode_texts = vec!["привет мир", "こんにちは", "🎉🎊🎁"];
if let Ok(re) = FuzzyRegex::new("(?:привет){e<=1}") {
for text in unicode_texts {
let _ = re.is_match(text);
}
}
}
#[test]
fn fuzz_replace() {
let patterns = ["hello", "(?:world){e<=1}", "(\\w+)"];
for pattern in patterns {
if let Ok(re) = FuzzyRegex::new(pattern) {
let _ = re.replace("hello world", "REPLACED");
let _ = re.replace_all("hello world hello", "X");
}
}
}
#[test]
fn fuzz_split() {
let patterns = [",", "\\s+"];
for pattern in patterns {
if let Ok(re) = FuzzyRegex::new(pattern) {
let _ = re.split("a,b,c").collect::<Vec<_>>();
let _ = re.splitn("a,b,c,d", 2);
}
}
}
#[test]
fn fuzz_similarity() {
for similarity in [0.0, 0.25, 0.5, 0.75, 1.0] {
let builder = FuzzyRegexBuilder::new("test").similarity(similarity);
let _ = builder.build();
}
}
#[test]
fn fuzz_word_lists() {
let mut re = FuzzyRegex::new(r"\L<words>").unwrap();
re.set_word_list("words", vec!["cat", "dog", "bird"]);
let texts = vec!["cat", "dog", "cat and dog", "bird", "", "elephant"];
for text in texts {
let _ = re.is_match(text);
let _ = re.find(text);
let _ = re.find_iter(text).collect::<Vec<_>>();
}
}