diff --git a/src/db/eval.rs b/src/db/eval.rs index 97eccdf7..139823c6 100644 --- a/src/db/eval.rs +++ b/src/db/eval.rs @@ -840,7 +840,7 @@ impl<'a> Session<'a> {} #[cfg(test)] mod tests { use super::*; - use crate::parser::Parser; + use crate::parser::{Parser, Rule}; use pest::Parser as PestParser; use crate::db::eval::MemoryEnv; @@ -883,6 +883,22 @@ mod tests { env.run_definition(t).unwrap(); println!("{:?}", env.resolve("WorkInfo")); } + + fn parse_expr_from_str(s: &str) -> (bool, Value) { + MemoryEnv::default().partial_eval(Value::from_pair(Parser::parse(Rule::expr, s).unwrap().next().unwrap()).unwrap()).unwrap() + } + + #[test] + fn eval_expr() { + assert_eq!((true, Value::from(1024.1)), parse_expr_from_str("1/10+(-2+3)*4^5")); + assert_eq!((true, Value::from(false)), parse_expr_from_str("true && false")); + assert_eq!((true, Value::from(true)), parse_expr_from_str("true || false")); + assert_eq!((true, Value::from(true)), parse_expr_from_str("true || null")); + assert_eq!((true, Value::from(true)), parse_expr_from_str("null || true")); + assert_eq!((true, Value::Null), parse_expr_from_str("true && null")); + let ex = parse_expr_from_str("a + b - 1*2*3*100*c * d"); + println!("{:?} {}", ex.0, ex.1); + } } // fn test_null_expr<'a>(&self, exprs: &[Expr<'a>]) -> Result> { @@ -918,11 +934,5 @@ mod tests { // fn operators() { // let ev = Evaluator::new(DummyStorage {}).unwrap(); // -// println!("{:#?}", ev.visit_expr(&parse_expr_from_str("1/10+(-2+3)*4^5").unwrap()).unwrap()); -// println!("{:#?}", ev.visit_expr(&parse_expr_from_str("true && false").unwrap()).unwrap()); -// println!("{:#?}", ev.visit_expr(&parse_expr_from_str("true || false").unwrap()).unwrap()); -// println!("{:#?}", ev.visit_expr(&parse_expr_from_str("true || null").unwrap()).unwrap()); -// println!("{:#?}", ev.visit_expr(&parse_expr_from_str("null || true").unwrap()).unwrap()); -// println!("{:#?}", ev.visit_expr(&parse_expr_from_str("true && null").unwrap()).unwrap()); // } // } \ No newline at end of file