#[allow(unused_imports)]
use super::functions::*;
use super::types::Expr;
use std::fmt;
impl fmt::Display for Expr {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Expr::Const(v) => {
if *v == (*v as i64) as f64 && v.abs() < 1e15 {
write!(f, "{}", *v as i64)
} else {
write!(f, "{:.6}", v)
}
}
Expr::Var(s) => write!(f, "{}", s),
Expr::Add(a, b) => write!(f, "({} + {})", a, b),
Expr::Mul(a, b) => write!(f, "({} * {})", a, b),
Expr::Pow(a, b) => write!(f, "({} ^ {})", a, b),
Expr::Div(a, b) => write!(f, "({} / {})", a, b),
Expr::Neg(a) => write!(f, "(-{})", a),
Expr::Sin(a) => write!(f, "sin({})", a),
Expr::Cos(a) => write!(f, "cos({})", a),
Expr::Exp(a) => write!(f, "exp({})", a),
Expr::Ln(a) => write!(f, "ln({})", a),
}
}
}