diff --git a/crates/nu-parser/src/type_check.rs b/crates/nu-parser/src/type_check.rs index be355e087a0d..8c2eda8a7ed7 100644 --- a/crates/nu-parser/src/type_check.rs +++ b/crates/nu-parser/src/type_check.rs @@ -429,6 +429,7 @@ pub fn math_result_type( (Type::Int, Type::Number) => (Type::Bool, None), (Type::Number, Type::Float) => (Type::Bool, None), (Type::Float, Type::Number) => (Type::Bool, None), + (Type::String, Type::String) => (Type::Bool, None), (Type::Duration, Type::Duration) => (Type::Bool, None), (Type::Date, Type::Date) => (Type::Bool, None), (Type::Filesize, Type::Filesize) => (Type::Bool, None), @@ -478,6 +479,7 @@ pub fn math_result_type( (Type::Int, Type::Number) => (Type::Bool, None), (Type::Number, Type::Float) => (Type::Bool, None), (Type::Float, Type::Number) => (Type::Bool, None), + (Type::String, Type::String) => (Type::Bool, None), (Type::Duration, Type::Duration) => (Type::Bool, None), (Type::Date, Type::Date) => (Type::Bool, None), (Type::Filesize, Type::Filesize) => (Type::Bool, None), @@ -527,6 +529,7 @@ pub fn math_result_type( (Type::Int, Type::Number) => (Type::Bool, None), (Type::Number, Type::Float) => (Type::Bool, None), (Type::Float, Type::Number) => (Type::Bool, None), + (Type::String, Type::String) => (Type::Bool, None), (Type::Duration, Type::Duration) => (Type::Bool, None), (Type::Date, Type::Date) => (Type::Bool, None), (Type::Filesize, Type::Filesize) => (Type::Bool, None), @@ -576,6 +579,7 @@ pub fn math_result_type( (Type::Int, Type::Number) => (Type::Bool, None), (Type::Number, Type::Float) => (Type::Bool, None), (Type::Float, Type::Number) => (Type::Bool, None), + (Type::String, Type::String) => (Type::Bool, None), (Type::Duration, Type::Duration) => (Type::Bool, None), (Type::Date, Type::Date) => (Type::Bool, None), (Type::Filesize, Type::Filesize) => (Type::Bool, None), diff --git a/crates/nu-parser/tests/test_parser.rs b/crates/nu-parser/tests/test_parser.rs index 0f7faf6fa94e..b984f97ba990 100644 --- a/crates/nu-parser/tests/test_parser.rs +++ b/crates/nu-parser/tests/test_parser.rs @@ -1915,3 +1915,27 @@ mod input_types { ) } } + +#[cfg(test)] +mod operator { + use super::*; + + #[rstest] + #[case(br#""abc" < "bca""#, "string < string")] + #[case(br#""abc" <= "bca""#, "string <= string")] + #[case(br#""abc" > "bca""#, "string > string")] + #[case(br#""abc" >= "bca""#, "string >= string")] + fn parse_comparison_operators_with_string_and_string( + #[case] expr: &[u8], + #[case] test_tag: &str, + ) { + let engine_state = EngineState::new(); + let mut working_set = StateWorkingSet::new(&engine_state); + parse(&mut working_set, None, expr, false); + assert_eq!( + working_set.parse_errors.len(), + 0, + "{test_tag}: expected to be parsed successfully, but failed." + ); + } +}