#[cfg(test)]
mod tests {
use spindalis::polynomials::PolynomialError;
use spindalis::polynomials::{eval_simple_polynomial, parse_simple_polynomial};
#[test]
fn test_parse_simple_polynomial_simple() {
let coeffs = parse_simple_polynomial("2x^2 + 3x + 4").unwrap();
let coeffs_macro = parse_simple_polynomial!(2 x ^ 2 + 3 x + 4);
let result = vec![
4.0, 3.0, 2.0, ];
assert_eq!(coeffs, result);
assert_eq!(coeffs_macro, result);
}
#[test]
fn test_parse_simple_polynomial_negative_coeffs() {
let coeffs = parse_simple_polynomial("-2x^3 - 4x + 1").unwrap();
let coeffs_macro = parse_simple_polynomial!(-2 x ^3 - 4 x + 1);
let result = vec![
1.0, -4.0, 0.0, -2.0, ];
assert_eq!(coeffs, result);
assert_eq!(coeffs_macro, result);
}
#[test]
fn test_parse_simple_polynomial_implicit_coeff() {
let coeffs = parse_simple_polynomial("x^2 + x + 1").unwrap();
let coeffs_macro = parse_simple_polynomial!(x ^ 2 + x + 1);
let result = vec![1.0, 1.0, 1.0];
assert_eq!(coeffs, result);
assert_eq!(coeffs_macro, result);
}
#[test]
fn test_parse_simple_polynomial_missing_powers() {
let coeffs = parse_simple_polynomial("2x + 3").unwrap();
let coeffs_macro = parse_simple_polynomial!(2 x + 3);
let result = vec![3.0, 2.0];
assert_eq!(coeffs, result);
assert_eq!(coeffs_macro, result);
}
#[test]
fn test_parse_simple_polynomial_multiple_terms_same_power() {
let coeffs = parse_simple_polynomial("2x^2+3x^2").unwrap();
let coeffs_macro = parse_simple_polynomial!(2 x^2 + 3 x^2);
let result = vec![
0.0, 0.0, 5.0, ];
assert_eq!(coeffs, result);
assert_eq!(coeffs_macro, result);
}
#[test]
fn test_eval_polynomial_simple() {
let coeffs = parse_simple_polynomial("2x^2 + 3x + 4").unwrap();
let coeffs_macro = parse_simple_polynomial!(2 x^2 + 3 x + 4);
assert_eq!(coeffs, coeffs_macro);
let result = eval_simple_polynomial(2.0, &coeffs);
assert_eq!(result, 18.0);
}
#[test]
fn test_eval_polynomial_negative() {
let coeffs = parse_simple_polynomial("-x^2 + 4x - 5").unwrap();
let coeffs_macro = parse_simple_polynomial!(-x ^ 2 + 4 x - 5);
assert_eq!(coeffs, coeffs_macro);
let result = eval_simple_polynomial(3.0, &coeffs);
assert_eq!(result, -2.0);
}
#[test]
fn test_parse_simple_polynomial_constant() {
let result = parse_simple_polynomial("7").unwrap();
assert_eq!(result, vec![7.0]);
}
#[test]
fn test_parse_and_eval_combined() {
let coeffs = parse_simple_polynomial("x^3 - 2x + 1").unwrap();
let coeffs_macro = parse_simple_polynomial!(x^3 - 2 x + 1);
assert_eq!(coeffs, coeffs_macro);
let result_at_2 = eval_simple_polynomial(2.0, &coeffs);
assert_eq!(result_at_2, 5.0);
let result_at_0 = eval_simple_polynomial(0.0, &coeffs);
assert_eq!(result_at_0, 1.0);
}
#[test]
fn test_invalid_polynomial() {
let poly = "2x^ + 3x"; let parsed = parse_simple_polynomial(poly);
assert!(matches!(parsed, Err(PolynomialError::InvalidExponent)));
}
#[test]
fn test_invalid_polynomial_2() {
let poly = "x^2 + +"; let parsed = parse_simple_polynomial(poly);
assert!(matches!(
parsed,
Err(PolynomialError::PolynomialSyntaxError)
));
}
#[test]
fn test_invalid_polynomial_3() {
let poly = "x^2 - -4"; let parsed = parse_simple_polynomial(poly);
assert!(matches!(
parsed,
Err(PolynomialError::PolynomialSyntaxError)
));
}
}