From 00dfcdb10c3eb4443b981a2141401c93e850463f Mon Sep 17 00:00:00 2001 From: electria Date: Tue, 6 Oct 2026 16:11:40 -0700 Subject: [PATCH] fix: do not panic with zero-sized result --- src/nodes/eval.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/nodes/eval.rs b/src/nodes/eval.rs index bc6dd6e..5980b6e 100644 --- a/src/nodes/eval.rs +++ b/src/nodes/eval.rs @@ -28,8 +28,8 @@ impl Nodes { let len = nodes.len(); collapse_toplevel(nodes, len)?; - match nodes.pop().unwrap() { - Node::Number(n) => Ok(n), + match nodes.pop() { + Some(Node::Number(n)) => Ok(n), _ => Err(Error::CollapseFailed(self)), } } @@ -193,6 +193,8 @@ impl Function { #[cfg(test)] use super::PREC; +#[cfg(test)] +use std::assert_matches; #[test] fn test() { @@ -211,3 +213,11 @@ fn test() { 1.9092974268256817, ); } + +#[test] +fn test_zerosized() { + assert_matches!( + Nodes(vec![Node::ParenthesisStart, Node::ParenthesisEnd]).evaluate(), + Err(Error::CollapseFailed(Nodes(v))) if v.is_empty() + ) +}