From 59915cf34ab344c5a45d98dea964bb1c0e19fb33 Mon Sep 17 00:00:00 2001 From: Sven Nilsen Date: Fri, 29 May 2020 09:42:02 +0200 Subject: [PATCH] Make inline succeed by success of at least one sub-branch - Added eval test case - Published 0.10.1 --- Cargo.toml | 2 +- src/lib.rs | 35 ++++++++++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0389b00..09b5eac 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "poi" -version = "0.10.0" +version = "0.10.1" authors = ["Sven Nilsen "] edition = "2018" keywords = ["advancedresearch", "theorem", "proving", "assistant", "point-free"] diff --git a/src/lib.rs b/src/lib.rs index 1eedb1e..5bd7ac3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -499,11 +499,24 @@ impl Expr { Ok(b) => Ok(constr(a, b)), } } else { - Ok(Op( - *op, - Box::new(a.inline_all(knowledge)?), - Box::new(b.inline_all(knowledge)?) - )) + match (a.inline_all(knowledge), b.inline_all(knowledge)) { + (Ok(a), Ok(b)) => Ok(Op( + *op, + Box::new(a), + Box::new(b) + )), + (Ok(a), Err(_)) => Ok(Op( + *op, + Box::new(a), + b.clone() + )), + (Err(_), Ok(b)) => Ok(Op( + *op, + a.clone(), + Box::new(b) + )), + (err, _) => err, + } } } Tup(a) => { @@ -1323,4 +1336,16 @@ mod tests { let f: Expr = true.into(); assert_eq!(f.has_constraint(0), false); } + + #[test] + fn eval_var() { + let def = &[Def("x".into(), 0.0.into())]; + let f: Expr = "x".into(); + assert_eq!(f.eval(def).unwrap(), Ret(F64(0.0))); + + let mut def = std(); + def.push(Def("x".into(), 2.0.into())); + let f: Expr = app2(Add, 1.0, "x"); + assert_eq!(f.eval(&def).unwrap(), Ret(F64(3.0))); + } }