mathhook_core/macros/
parsing.rs1#[macro_export]
23macro_rules! parse {
24 ($input:expr) => {{
26 $crate::parser::grammar::ExpressionParser::new().parse($input)
27 }};
28
29 (constant: pi) => {
31 $crate::Expression::constant($crate::MathConstant::Pi)
32 };
33
34 (constant: e) => {
35 $crate::Expression::constant($crate::MathConstant::E)
36 };
37
38 (constant: i) => {
39 $crate::Expression::constant($crate::MathConstant::I)
40 };
41
42 (constant: infinity) => {
43 $crate::Expression::constant($crate::MathConstant::Infinity)
44 };
45}
46
47#[cfg(test)]
48mod tests {
49 use crate::{Expression, MathConstant};
50
51 #[test]
52 fn test_parse_constants() {
53 let pi = parse!(constant: pi);
54 assert_eq!(pi, Expression::constant(MathConstant::Pi));
55
56 let e = parse!(constant: e);
57 assert_eq!(e, Expression::constant(MathConstant::E));
58
59 let i = parse!(constant: i);
60 assert_eq!(i, Expression::constant(MathConstant::I));
61
62 let infinity = parse!(constant: infinity);
63 assert_eq!(infinity, Expression::constant(MathConstant::Infinity));
64 }
65
66 #[test]
67 fn test_parse_simple() {
68 let result = parse!("x").unwrap();
69 assert!(matches!(result, Expression::Symbol(_)));
70 }
71}