Skip to content

Commit 96eff61

Browse files
Copilottudny
andcommitted
Clean up unused tokens and add integration tests
Co-authored-by: tudny <[email protected]>
1 parent da37674 commit 96eff61

File tree

1 file changed

+33
-16
lines changed

1 file changed

+33
-16
lines changed

src/parser.rs

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,6 @@ enum WorkingToken<T: MatrixNumber> {
9898
BinaryOp(char),
9999
LeftBracket,
100100
RightBracket,
101-
LeftMatrixBracket,
102-
RightMatrixBracket,
103-
Semicolon,
104101
}
105102

106103
impl<T: MatrixNumber> Display for WorkingToken<T> {
@@ -112,9 +109,6 @@ impl<T: MatrixNumber> Display for WorkingToken<T> {
112109
WorkingToken::BinaryOp(op) => write!(f, "binary operator \"{op}\""),
113110
WorkingToken::LeftBracket => write!(f, "( bracket"),
114111
WorkingToken::RightBracket => write!(f, ") bracket"),
115-
WorkingToken::LeftMatrixBracket => write!(f, "[ bracket"),
116-
WorkingToken::RightMatrixBracket => write!(f, "] bracket"),
117-
WorkingToken::Semicolon => write!(f, "; semicolon"),
118112
}
119113
}
120114
}
@@ -344,7 +338,7 @@ pub fn parse_expression<T: MatrixNumber>(
344338
current: &Token,
345339
) -> bool {
346340
match current {
347-
Token::Integer(_) | Token::Identifier(_) | Token::LeftBracket | Token::LeftMatrixBracket => matches!(
341+
Token::Integer(_) | Token::Identifier(_) | Token::LeftBracket => matches!(
348342
previous,
349343
None | Some(WorkingToken::LeftBracket)
350344
| Some(WorkingToken::BinaryOp(_))
@@ -357,20 +351,13 @@ pub fn parse_expression<T: MatrixNumber>(
357351
| Some(WorkingToken::Type(_))
358352
| Some(WorkingToken::BinaryOp(_))
359353
| Some(WorkingToken::LeftBracket)
360-
| Some(WorkingToken::RightMatrixBracket)
361354
),
362355
Token::RightBracket => matches!(
363356
previous,
364357
Some(WorkingToken::RightBracket) | Some(WorkingToken::Type(_))
365358
),
366-
Token::RightMatrixBracket => matches!(
367-
previous,
368-
Some(WorkingToken::Type(_)) | Some(WorkingToken::RightMatrixBracket)
369-
),
370-
Token::Semicolon => matches!(
371-
previous,
372-
Some(WorkingToken::Type(_)) | Some(WorkingToken::RightMatrixBracket)
373-
),
359+
// Matrix tokens should not appear in regular expressions since we handle them at a higher level
360+
Token::LeftMatrixBracket | Token::RightMatrixBracket | Token::Semicolon => false,
374361
}
375362
}
376363

@@ -952,4 +939,34 @@ mod tests {
952939
Type::Matrix(im![19, 22; 43, 50])
953940
);
954941
}
942+
943+
#[test]
944+
fn test_matrix_syntax_integration_examples() {
945+
let mut env = Environment::<Rational64>::new();
946+
947+
// Test matrix examples from the issue description
948+
949+
// Test 1: [1 4; 3 2]
950+
let result1 = parse_expression("[1 4; 3 2]", &env);
951+
assert!(result1.is_ok());
952+
println!("✅ [1 4; 3 2] = {}", result1.unwrap().to_string());
953+
954+
// Test 2: [-1/2 5/4 5/2; 1/2 13/17 -9/2]
955+
let result2 = parse_expression("[-1/2 5/4 5/2; 1/2 13/17 -9/2]", &env);
956+
assert!(result2.is_ok());
957+
println!("✅ [-1/2 5/4 5/2; 1/2 13/17 -9/2] parsed successfully");
958+
959+
// Test 3: [a -3/2 x] with variables
960+
env.insert(Identifier::new("a".to_string()).unwrap(), Type::Scalar(Rational64::new(1, 1)));
961+
env.insert(Identifier::new("x".to_string()).unwrap(), Type::Scalar(Rational64::new(2, 1)));
962+
963+
let result3 = parse_expression("[a -3/2 x]", &env);
964+
assert!(result3.is_ok());
965+
println!("✅ [a -3/2 x] = {}", result3.unwrap().to_string());
966+
967+
// Test 4: Single column matrix
968+
let result4 = parse_expression("[1; 2; 3]", &env);
969+
assert!(result4.is_ok());
970+
println!("✅ [1; 2; 3] = {}", result4.unwrap().to_string());
971+
}
955972
}

0 commit comments

Comments
 (0)