diff --git a/src/nodes/evaluate.rs b/src/nodes/evaluate.rs index ae78ed1..13635f8 100644 --- a/src/nodes/evaluate.rs +++ b/src/nodes/evaluate.rs @@ -42,7 +42,13 @@ fn collapse_toplevel(nodes: &mut Vec, mut end: usize) { match &mut nodes[start..end][index + 1] { Node::Number(n) => match variant { Function::Sine => n.sin_mut(), + Function::ArcSine => n.asin_mut(), Function::Cosine => n.cos_mut(), + Function::ArcCosine => n.acos_mut(), + Function::Tangent => n.tan_mut(), + Function::ArcTangent => n.atan_mut(), + Function::Secant => n.sec_mut(), + Function::CoSecant => n.csc_mut(), }, _ => panic!("function is missing an argument"), }; diff --git a/src/nodes/mod.rs b/src/nodes/mod.rs index 874c98b..aa60e80 100644 --- a/src/nodes/mod.rs +++ b/src/nodes/mod.rs @@ -55,14 +55,26 @@ impl TryFrom for Operator { #[derive(Clone, Debug, PartialEq)] enum Function { Sine, + ArcSine, Cosine, + ArcCosine, + Tangent, + ArcTangent, + Secant, + CoSecant, } impl FromStr for Function { type Err = (); fn from_str(s: &str) -> Result { match s { "sin" => Ok(Self::Sine), + "asin" => Ok(Self::ArcSine), "cos" => Ok(Self::Cosine), + "acos" => Ok(Self::ArcCosine), + "tan" => Ok(Self::Tangent), + "atan" => Ok(Self::ArcTangent), + "sec" => Ok(Self::Secant), + "csc" => Ok(Self::CoSecant), _ => Err(()), } }