mathhook_core/functions/elementary/
exp_eval.rs1use crate::core::{Expression, Number};
4
5pub fn exp(arg: &Expression) -> Expression {
29 match arg {
30 Expression::Number(Number::Integer(0)) => Expression::integer(1),
31 Expression::Number(Number::Float(f)) => Expression::float(f.exp()),
32 Expression::Number(Number::Integer(i)) => Expression::float((*i as f64).exp()),
33 _ => Expression::function("exp", vec![arg.clone()]),
34 }
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn test_exp_zero() {
43 assert_eq!(exp(&Expression::integer(0)), Expression::integer(1));
44 }
45
46 #[test]
47 fn test_exp_one() {
48 let result = exp(&Expression::integer(1));
49 if let Expression::Number(Number::Float(f)) = result {
50 assert!((f - std::f64::consts::E).abs() < 1e-10);
51 } else {
52 panic!("Expected float result");
53 }
54 }
55}