feat(tests): add tests

added tests for the struct displays, eval function, lexer, and parser
This commit is contained in:
ozzy committed 2026-09-27 14:23:23 -05:00
1 parent d5397d1591
commit 62070919eb
9 files changed
+312 -3

No files matched your search

+97
View File
@@ -0,0 +1,97 @@
use rust_decimal::{Decimal, dec};
use crate::math::types::{Expression, Operator};
#[test]
fn test_operator_display() {
let cases = vec![
(Operator::Add, "+"),
(Operator::Subtract, "-"),
(Operator::Multiply, "*"),
(Operator::Divide, "/"),
(Operator::Power, "^"),
(Operator::Modulo, "%"),
];
for (operation, expected) in cases {
assert_eq!(operation.to_string(), expected);
}
}
#[test]
fn test_expr_display_number() {
let cases = vec![
(Expression::Number(dec!(1)), "1"),
(Expression::Number(dec!(0.5)), "0.5"),
(
Expression::Number(Decimal::PI),
"3.1415926535897932384626433833",
),
];
for (expr, expected) in cases {
assert_eq!(expr.to_string(), expected);
}
}
#[test]
fn test_expr_display_variable() {
let expr = Expression::Variable("x".to_owned());
assert_eq!(expr.to_string(), "x");
}
#[test]
fn test_expr_display_fraction() {
let cases = vec![
(
Expression::Fraction(
Box::new(Expression::Number(dec!(1))),
Box::new(Expression::Number(dec!(2))),
),
"(1 / 2)",
),
(
Expression::Fraction(
Box::new(Expression::Number(dec!(5))),
Box::new(Expression::Number(dec!(3))),
),
"(5 / 3)",
),
];
for (expr, expected) in cases {
assert_eq!(expr.to_string(), expected);
}
}
#[test]
fn test_expr_display_operation() {
let cases = vec![
(
Expression::Operation(
Operator::Multiply,
Box::new(Expression::Number(dec!(1))),
Box::new(Expression::Number(dec!(2))),
),
"(1 * 2)",
),
(
Expression::Operation(
Operator::Modulo,
Box::new(Expression::Number(dec!(6))),
Box::new(Expression::Number(dec!(3))),
),
"(6 % 3)",
),
];
for (expr, expected) in cases {
assert_eq!(expr.to_string(), expected);
}
}
#[test]
fn test_expr_display_function() {
let expr = Expression::Function("sin".to_owned(), vec![Expression::Number(dec!(1))]);
assert_eq!(expr.to_string(), "sin(1)");
}