From dfb50bde6e22a59915126fb21d714bae9b83ea2d Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Wed, 22 May 2024 14:21:33 +0100 Subject: [PATCH] Fix bug where a `*` in the pattern would be considered a literal `*` if the current char in the input was also a `*`. Fixes #22. --- src/lib.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index d51e6c9..e60b174 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -117,6 +117,12 @@ impl loop { if pattern_idx < self.pattern.len() + && self.pattern[pattern_idx] == MULTI_WILDCARD + { + start_idx = pattern_idx; + matched = input_chars.clone(); + pattern_idx += 1; + } else if pattern_idx < self.pattern.len() && (self.pattern[pattern_idx] == SINGLE_WILDCARD || self.pattern[pattern_idx] == input_char) { @@ -126,12 +132,6 @@ impl } else { break; } - } else if pattern_idx < self.pattern.len() - && self.pattern[pattern_idx] == MULTI_WILDCARD - { - start_idx = pattern_idx; - matched = input_chars.clone(); - pattern_idx += 1; } else if start_idx != NONE { pattern_idx = start_idx + 1; if let Some(next_char) = matched.next() { @@ -292,6 +292,7 @@ mod tests { #[test_case("*cat*", "d&(*og_cat_dog")] #[test_case("*?*", "d&(*og_cat_dog")] #[test_case("*a*", "d&(*og_cat_dog")] + #[test_case("a*b", "a*xb")] #[test_case("*", "*")] #[test_case("*", "?")] #[test_case("?", "?")]