add test for eval
This commit is contained in:
parent
2601dcd274
commit
c2ac495c0d
1 changed files with 16 additions and 6 deletions
22
src/main.rs
22
src/main.rs
|
@ -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 as 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 });
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue