Fix #7 panic on too few function arguments

Signed-off-by: trivernis <trivernis@protonmail.com>
pull/8/head
trivernis 3 years ago
parent 1a2d249a54
commit ebc02e09dc
Signed by: Trivernis
GPG Key ID: DFFFCC2C7A02DB45

@ -15,6 +15,7 @@ pub enum Element {
Special(Special),
Group(Group),
Accent(ExpressionAccent),
Null,
}
impl Boxed for Element {}

@ -696,6 +696,7 @@ impl ToMathML for Element {
Element::Literal(l) => l.to_mathml(),
Element::Group(g) => g.to_mathml(),
Element::Accent(a) => a.to_mathml(),
Element::Null => "".to_string(),
}
}
}

@ -228,21 +228,21 @@ impl TreeParser {
Misc::LatexFrac => {
self.step();
Element::Special(Special::Frac(Frac {
top: self.parse_element().unwrap().boxed(),
bottom: self.parse_element().unwrap().boxed(),
top: self.parse_element().unwrap_or(Element::Null).boxed(),
bottom: self.parse_element().unwrap_or(Element::Null).boxed(),
}))
}
Misc::Sqrt => {
self.step();
Element::Special(Special::Sqrt(Sqrt {
inner: self.parse_element().unwrap().boxed(),
inner: self.parse_element().unwrap_or(Element::Null).boxed(),
}))
}
Misc::Root => {
self.step();
let base = self.parse_element().unwrap().boxed();
let base = self.parse_element().unwrap_or(Element::Null).boxed();
self.step();
let inner = self.parse_element().unwrap().boxed();
let inner = self.parse_element().unwrap_or(Element::Null).boxed();
Element::Special(Special::Root(Root { inner, base }))
}
Misc::Int => Element::Special(Special::Integral(Integral {
@ -432,7 +432,11 @@ impl TreeParser {
self.step();
Some(Pow {
base: previous.clone().boxed(),
exp: self.parse_element().unwrap().to_non_enclosed().boxed(),
exp: self
.parse_element()
.unwrap_or(Element::Null)
.to_non_enclosed()
.boxed(),
})
} else {
None
@ -446,7 +450,11 @@ impl TreeParser {
self.step();
Some(Sub {
base: previous.clone().boxed(),
lower: self.parse_element().unwrap().to_non_enclosed().boxed(),
lower: self
.parse_element()
.unwrap_or(Element::Null)
.to_non_enclosed()
.boxed(),
})
} else {
None

@ -228,5 +228,23 @@ fn it_parses_roots() {
.boxed(),
}))]
}
);
// test no fail
parse("root 3".to_string());
}
#[test]
fn it_parses_functions() {
let expr = parse("sin 10".to_string());
assert_eq!(
expr,
Expression {
children: vec![
Element::Literal(Literal::Function(Function::Sin)),
Element::Literal(Literal::Number(Number {
number: "10".to_string()
}))
]
}
)
}

Loading…
Cancel
Save