make subtract actually subtract instead of add
This commit is contained in:
@@ -201,7 +201,7 @@ impl<'a> ParseTree<'a> {
|
|||||||
{
|
{
|
||||||
match self {
|
match self {
|
||||||
ParseTree::Add(l, r) => Ok(l.evaluate(globals, locals)? + r.evaluate(globals, locals)?),
|
ParseTree::Add(l, r) => Ok(l.evaluate(globals, locals)? + r.evaluate(globals, locals)?),
|
||||||
ParseTree::Sub(l, r) => Ok(l.evaluate(globals, locals)? + r.evaluate(globals, locals)?),
|
ParseTree::Sub(l, r) => Ok(l.evaluate(globals, locals)? - r.evaluate(globals, locals)?),
|
||||||
ParseTree::Mul(l, r) => Ok(l.evaluate(globals, locals)? * r.evaluate(globals, locals)?),
|
ParseTree::Mul(l, r) => Ok(l.evaluate(globals, locals)? * r.evaluate(globals, locals)?),
|
||||||
ParseTree::Div(l, r) => Ok(l.evaluate(globals, locals)? / r.evaluate(globals, locals)?),
|
ParseTree::Div(l, r) => Ok(l.evaluate(globals, locals)? / r.evaluate(globals, locals)?),
|
||||||
ParseTree::Exp(l, r)
|
ParseTree::Exp(l, r)
|
||||||
@@ -287,28 +287,3 @@ impl<'a> ParseTree<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_parse() {
|
|
||||||
let tokens = Token::tokenize("= x 15 : square x ** x 2 square x").expect("failed to tokenize");
|
|
||||||
let mut tokens = tokens.iter();
|
|
||||||
|
|
||||||
let globals = HashMap::new();
|
|
||||||
let locals = HashMap::new();
|
|
||||||
let mut locals = Cow::Borrowed(&locals);
|
|
||||||
|
|
||||||
let tree = ParseTree::parse(&mut tokens, &globals, &mut locals).expect("failed to parse");
|
|
||||||
|
|
||||||
eprintln!("{tree:?}");
|
|
||||||
|
|
||||||
let mut globals = HashMap::new();
|
|
||||||
let locals = HashMap::new();
|
|
||||||
let mut locals = Cow::Borrowed(&locals);
|
|
||||||
|
|
||||||
eprintln!("{}", tree.evaluate(&mut globals, &mut locals).expect("failed to evaluate"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user