refactor: add and use testing helper fn eval

This commit is contained in:
electria 2026-09-28 13:01:24 -07:00
commit c3526bf161
Signed by: electria
SSH key fingerprint: SHA256:8LlB3ucPbBHqozqkhsNbaV5oG3SlzzqUj8FZDL6IPQs

View file

@ -5,62 +5,40 @@ use rug::Float;
use crate::nodes::{Function, Node, Nodes, Operator, PREC};
fn eval(s: &str) -> f64 {
Nodes::from_str(s).unwrap().evaluate().to_f64()
}
#[test]
fn plus_minus_order() {
assert_eq!(
Nodes::from_str("1 - 4 - 5").unwrap().evaluate().to_f64(),
-8.
);
assert_eq!(
Nodes::from_str("1 - 4 + 5").unwrap().evaluate().to_f64(),
2.
);
assert_eq!(
Nodes::from_str("1 + 4 - 5").unwrap().evaluate().to_f64(),
0.
);
assert_eq!(eval("1 - 4 - 5"), -8.);
assert_eq!(eval("1 - 4 + 5"), 2.);
assert_eq!(eval("1 + 4 - 5"), 0.);
}
#[test]
fn e_edge_case() {
assert_eq!(Nodes::from_str("1e-1").unwrap().evaluate().to_f64(), 0.1)
assert_eq!(eval("1e-1"), 0.1)
}
#[test]
fn implicit_mult() {
assert_eq!(
Nodes::from_str("10 sin(10)").unwrap().evaluate().to_f64(),
-5.440211108893698
);
assert_eq!(eval("10 sin(10)"), -5.440211108893698);
assert_eq!(
Nodes::from_str("(10)(10)").unwrap().evaluate().to_f64(),
100.,
)
assert_eq!(eval("(10)(10)"), 100.,)
}
#[test]
fn constants() {
assert_eq!(
Nodes::from_str("c").unwrap().evaluate().to_f64(),
299792458.
);
assert_eq!(
Nodes::from_str("A").unwrap().evaluate().to_f64(),
6.02214076e23
);
assert_eq!(
Nodes::from_str("pi").unwrap().evaluate().to_f64(),
f64::consts::PI
);
assert_eq!(eval("c"), 299792458.);
assert_eq!(eval("A"), 6.02214076e23);
assert_eq!(eval("pi"), f64::consts::PI);
}
#[test]
fn unary_operators() {
assert_eq!(Nodes::from_str("-10").unwrap().evaluate().to_f64(), -10.);
assert_eq!(Nodes::from_str("+10").unwrap().evaluate().to_f64(), 10.);
assert_eq!(eval("-10"), -10.);
assert_eq!(eval("+10"), 10.);
}
#[test]