use crate::aux::Polynomial;
use crate::solver::Roots;
pub fn degree_0(poly: Polynomial) -> Result<Roots, String> {
let val: f64 = poly.terms.get(&0).copied().unwrap_or(0.0);
if val == 0.0 {
Ok(Roots::with_real(vec![]))
} else {
Err("No solution.".to_string())
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::parser::parse_equation;
use std::collections::BTreeMap;
mod degree_0 {
use super::*;
#[test]
fn test_all_real_numbers_are_solutions() {
let mut terms: BTreeMap<u32, f64> = BTreeMap::new();
terms.insert(0, 0.0);
let poly: Polynomial = Polynomial {
terms,
variable: "X".to_string(),
};
let result: Result<Roots, String> = degree_0(poly);
assert_eq!(result, Ok(Roots::with_real(vec![])));
}
#[test]
fn test_no_solution() {
let mut terms: BTreeMap<u32, f64> = BTreeMap::new();
terms.insert(0, 5.0);
let poly: Polynomial = Polynomial {
terms,
variable: "X".to_string(),
};
let result: Result<Roots, String> = degree_0(poly);
assert_eq!(result, Err("No solution.".to_string()));
}
#[test]
fn test_missing_constant_term() {
let terms: BTreeMap<u32, f64> = BTreeMap::new(); let poly: Polynomial = Polynomial {
terms,
variable: "X".to_string(),
};
let result: Result<Roots, String> = degree_0(poly);
assert_eq!(result, Ok(Roots::with_real(vec![])));
}
#[test]
fn test_all_real_numbers_are_solutions_with_parse() {
let equation: &str = "0 * X^0 = 0 * X^0";
let poly: Polynomial = parse_equation(equation).expect("Failed to parse equation");
let result: Result<Roots, String> = degree_0(poly);
assert_eq!(result, Ok(Roots::with_real(vec![])));
}
#[test]
fn test_no_solution_with_parse() {
let equation: &str = "5 * X^0 = 0 * X^0";
let poly: Polynomial = parse_equation(equation).expect("Failed to parse equation");
let result: Result<Roots, String> = degree_0(poly);
assert_eq!(result, Err("No solution.".to_string()));
let equation: &str = "5X^0 - 5 = 1X^0";
let poly: Polynomial = parse_equation(equation).expect("Failed to parse equation");
let result: Result<Roots, String> = degree_0(poly);
assert_eq!(result, Err("No solution.".to_string()));
let equation: &str = "5X^0 - 5 = X^0";
let poly: Polynomial = parse_equation(equation).expect("Failed to parse equation");
let result: Result<Roots, String> = degree_0(poly);
assert_eq!(result, Err("No solution.".to_string()));
}
#[test]
fn test_valid_solution_with_parse() {
let equation: &str = "5 * X^0 - 5 = 0 * X^0";
let poly: Polynomial = parse_equation(equation).expect("Failed to parse equation");
let result: Result<Roots, String> = degree_0(poly);
assert_eq!(result, Ok(Roots::with_real(vec![])));
let equation: &str = "5X^0 - 5 = 0X^0";
let poly: Polynomial = parse_equation(equation).expect("Failed to parse equation");
let result: Result<Roots, String> = degree_0(poly);
assert_eq!(result, Ok(Roots::with_real(vec![])));
}
#[test]
fn test_missing_constant_term_with_parse() {
let equation: &str = "0 = 0";
let poly: Polynomial = parse_equation(equation).expect("Failed to parse equation");
let result: Result<Roots, String> = degree_0(poly);
assert_eq!(result, Ok(Roots::with_real(vec![])));
}
}
}