98 lines
2.3 KiB
Rust
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)");
|
|
}
|