use yufmath::Yufmath;
#[test]
fn test_logarithm_functions() {
let yuf = Yufmath::new();
let result = yuf.compute("ln(e)").unwrap();
assert_eq!(result, "1");
let result = yuf.compute("ln(1)").unwrap();
assert_eq!(result, "0");
}
#[test]
fn test_trigonometric_functions() {
let yuf = Yufmath::new();
let result = yuf.compute("sin(0)").unwrap();
assert_eq!(result, "0");
let result = yuf.compute("sin(pi/2)").unwrap();
assert_eq!(result, "1");
let result = yuf.compute("cos(0)").unwrap();
assert_eq!(result, "1");
let result = yuf.compute("cos(pi/2)").unwrap();
assert_eq!(result, "0");
}
#[test]
fn test_exponential_functions() {
let yuf = Yufmath::new();
let result = yuf.compute("exp(0)").unwrap();
assert_eq!(result, "1");
let result = yuf.compute("exp(1)").unwrap();
assert_eq!(result, "e");
}
#[test]
fn test_square_root_functions() {
let yuf = Yufmath::new();
let result = yuf.compute("sqrt(0)").unwrap();
assert_eq!(result, "0");
let result = yuf.compute("sqrt(1)").unwrap();
assert_eq!(result, "1");
let result = yuf.compute("sqrt(4)").unwrap();
assert_eq!(result, "2");
let result = yuf.compute("sqrt(9)").unwrap();
assert_eq!(result, "3");
let result = yuf.compute("sqrt(16)").unwrap();
assert_eq!(result, "4");
}
#[test]
fn test_factorial_functions() {
let yuf = Yufmath::new();
let result = yuf.compute("factorial(0)").unwrap();
assert_eq!(result, "1");
let result = yuf.compute("factorial(1)").unwrap();
assert_eq!(result, "1");
let result = yuf.compute("factorial(5)").unwrap();
assert_eq!(result, "120");
let result = yuf.compute("factorial(10)").unwrap();
assert_eq!(result, "3628800");
}
#[test]
fn test_absolute_value_functions() {
let yuf = Yufmath::new();
let result = yuf.compute("abs(0)").unwrap();
assert_eq!(result, "0");
let result = yuf.compute("abs(5)").unwrap();
assert_eq!(result, "5");
let result = yuf.compute("abs(-5)").unwrap();
assert_eq!(result, "5");
}
#[test]
fn test_special_trigonometric_values() {
let yuf = Yufmath::new();
let result = yuf.compute("sin(pi/4)").unwrap();
assert!(result.contains("sqrt(2)") && result.contains("/ 2"));
let result = yuf.compute("sin(pi/6)").unwrap();
assert_eq!(result, "1/2");
let result = yuf.compute("cos(pi/4)").unwrap();
assert!(result.contains("sqrt(2)") && result.contains("/ 2"));
let result = yuf.compute("cos(pi/3)").unwrap();
assert_eq!(result, "1/2");
}
#[test]
fn test_function_composition() {
let yuf = Yufmath::new();
let result = yuf.compute("exp(ln(x))").unwrap();
assert_eq!(result, "x");
let result = yuf.compute("ln(exp(x))").unwrap();
assert_eq!(result, "x");
}
#[test]
fn test_numerical_functions() {
let yuf = Yufmath::new();
let result = yuf.compute("sin(1.5708)").unwrap(); if let Ok(val) = result.parse::<f64>() {
assert!((val - 1.0).abs() < 0.01);
}
let result = yuf.compute("ln(2.71828)").unwrap(); if let Ok(val) = result.parse::<f64>() {
assert!((val - 1.0).abs() < 0.01);
}
}