use super::*;
use data::{DataRow, Headers};
pub mod v1;
pub trait Equation: Sized {
fn parse(expr: &str, columns: &Headers) -> Result<Self>;
fn params_len(&self) -> usize;
fn solve(&self, params: &[f64], row: DataRow) -> Option<f64>;
fn expr(&self) -> Option<String>;
fn params(&self) -> Vec<String>;
fn vars(&self) -> Vec<String>;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn distinct_params_and_vars() {
fn test<E: Equation>() {
let e = E::parse("x * x + d + d", &Headers::from_iter(["d"])).unwrap();
assert_eq!(e.params(), vec!["x".to_string()]);
assert_eq!(e.vars(), vec!["d".to_string()]);
}
test::<v1::Eq>();
}
}