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