From 58b3d876e48594089b601226b0f93fb2bc89f037 Mon Sep 17 00:00:00 2001 From: electria Date: Sun, 18 Oct 2026 22:29:14 -0700 Subject: [PATCH] fix: constant implicit mult before, "pi 2" caused a panic while "2 pi" worked just fine. now both directions work :) --- src/nodes/parse.rs | 8 +++++++- src/nodes/tests.rs | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/nodes/parse.rs b/src/nodes/parse.rs index 0405be0..ec44b3f 100644 --- a/src/nodes/parse.rs +++ b/src/nodes/parse.rs @@ -126,6 +126,12 @@ impl FromStr for Nodes { && !(c == 'e' && filtered_string.chars().nth(i + 1).is_some_and(|c| c == '-')) && !(c == '-' && filtered_string.chars().nth(i - 1).is_some_and(|c| c == 'e')) { + // likely a constant before this number + // no need to check for parenthesis here though (why?) + if matches!(nodes.last(), Some(Node::Number(_))) { + nodes.push(Node::Operator(Default::default())); + } + nodes.push(Node::from( Float::parse(&filtered_string[start_index..i]).map_err(|e| { Error::NumberParsing(filtered_string[start_index..i].to_owned(), e) @@ -180,7 +186,7 @@ impl FromStr for Nodes { ); } ParsingState::ReadingNumber(start_index) => { - if matches!(nodes.last(), Some(Node::ParenthesisEnd)) { + if matches!(nodes.last(), Some(Node::ParenthesisEnd | Node::Number(_))) { nodes.push(Node::Operator(Default::default())); } nodes.push(Node::from( diff --git a/src/nodes/tests.rs b/src/nodes/tests.rs index 1d40f50..d7cbd59 100644 --- a/src/nodes/tests.rs +++ b/src/nodes/tests.rs @@ -38,3 +38,9 @@ fn unary_operators() { assert_eq!(eval("-10"), -10.); assert_eq!(eval("+10"), 10.); } + +#[test] +fn constant_implicit_mult() { + assert_eq!(eval("2pi"), 6.283185307179586); + assert_eq!(eval("pi2"), 6.283185307179586); +}