Files
mcl/src/math/tests/display.rs
T
ozzy 62070919eb feat(tests): add tests
added tests for the struct displays, eval function, lexer, and parser
2026-09-27 14:23:23 -05:00

98 lines
2.3 KiB
Rust

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)");
}