add test for eval

This commit is contained in:
Charlie Root 2025-03-29 11:35:58 +01:00
commit ba6f572d6b
Signed by: faukah
SSH key fingerprint: SHA256:Uj2AXqvtdCA4hn5Hq0ZonhIAyUqI1q4w2sMG3Z1TH7E

View file

@ -1,4 +1,4 @@
use std::{error::Error, io};
use std::io;
#[derive(Debug, PartialEq, Eq)]
enum Symbol {
@ -20,6 +20,21 @@ enum Node {
Number { value: u64 },
}
#[test]
fn test_eval() {
let node_to_eval = Node::Add {
left: Box::new(Node::Add {
left: Box::new(Node::Number { value: 1 }),
right: Box::new(Node::Number { value: 1 }),
}),
right: Box::new(Node::Number { value: 3 }),
};
let result = eval(&node_to_eval);
assert!(result == 5_i64);
}
fn eval(expr: &Node) -> i64 {
match expr {
Node::Add { left, right } => eval(left) + eval(right),
@ -158,13 +173,10 @@ fn ast(input: Vec<Symbol>) -> Result<Node, ParseError> {
let mut i = 0;
while i < length {
// println!("Count: {}", i);
let s = &input[i];
// println!("Symbol: {:?}", s);
match s {
Symbol::Number { value } => {
stack.push(Node::Number { value: *value });
// println!("pushed {value}")
}
Symbol::Add => {
let left = stack.pop();
@ -199,8 +211,6 @@ fn ast(input: Vec<Symbol>) -> Result<Node, ParseError> {
}
i += 1;
}
// println!("Stack length: {}", stack.len());
// println!("Stack: {:?}", stack);
if stack.len() != 1 {
return Err(ParseError::WrongTokenError { pos: 1 });
}