diff --git a/src/find/matchers/mod.rs b/src/find/matchers/mod.rs index 4d3a9e4c..05ad37ae 100644 --- a/src/find/matchers/mod.rs +++ b/src/find/matchers/mod.rs @@ -246,6 +246,7 @@ impl Matcher for Box { } } +#[derive(Debug, Eq, PartialEq)] pub enum ComparableValue { MoreThan(u64), EqualTo(u64), @@ -311,7 +312,7 @@ fn convert_arg_to_comparable_value( option_name: &str, value_as_string: &str, ) -> Result> { - let re = Regex::new(r"^([+-]?)(\d+)$")?; + let re = Regex::new(r"^([-+]?)[-+]?(\d+)$")?; if let Some(groups) = re.captures(value_as_string) { if let Ok(val) = groups[2].parse::() { return Ok(match &groups[1] { @@ -331,7 +332,7 @@ fn convert_arg_to_comparable_value_and_suffix( option_name: &str, value_as_string: &str, ) -> Result<(ComparableValue, String), Box> { - let re = Regex::new(r"([+-]?)(\d+)(.*)$")?; + let re = Regex::new(r"([-+]?)[-+]?(\d+)(.*)$")?; if let Some(groups) = re.captures(value_as_string) { if let Ok(val) = groups[2].parse::() { return Ok(( @@ -1681,6 +1682,31 @@ mod tests { } } + #[test] + fn convert_arg_to_comparable_value_test() { + assert_eq!( + convert_arg_to_comparable_value("test", "10").unwrap(), + ComparableValue::EqualTo(10), + ); + assert_eq!( + convert_arg_to_comparable_value("test", "+10").unwrap(), + ComparableValue::MoreThan(10), + ); + assert_eq!( + convert_arg_to_comparable_value("test", "-10").unwrap(), + ComparableValue::LessThan(10), + ); + + assert_eq!( + convert_arg_to_comparable_value("test", "-+10").unwrap(), + ComparableValue::LessThan(10), + ); + assert_eq!( + convert_arg_to_comparable_value("test", "++10").unwrap(), + ComparableValue::MoreThan(10), + ); + } + #[test] fn convert_exception_arg_to_comparable_value_test() { let exception_args = ["1%2", "1%2%3", "1a2", "1%2a", "abc", "-", "+", "%"];