feat(tests): add tests
added tests for the struct displays, eval function, lexer, and parser
This commit is contained in:
9 files changed
+312
-3
No files matched your search
@@ -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)");
|
||||
}
|
||||
Reference in new issue
Block a user