mod ast;
mod eval;
mod parser;
pub use eval::{EvalError, Interpreter, Value};
#[cfg(test)]
mod test {
use super::*;
#[test]
fn test_arithmetic() {
let mut interp = Interpreter::new();
assert_eq!(interp.eval("1+2").unwrap().to_string(), "3");
assert_eq!(interp.eval("2*3+4").unwrap().to_string(), "10");
assert_eq!(interp.eval("10/2").unwrap().to_string(), "5");
}
#[test]
fn test_variables() {
let mut interp = Interpreter::new();
interp.eval("x=10").unwrap();
interp.eval("y=20").unwrap();
assert_eq!(interp.eval("x+y").unwrap().to_string(), "30");
interp.eval("x=x+5").unwrap();
assert_eq!(interp.eval("x").unwrap().to_string(), "15");
}
#[test]
fn test_lambda() {
let mut interp = Interpreter::new();
interp.eval("inc = lambda a: a+1").unwrap();
assert_eq!(interp.eval("inc(10)").unwrap().to_string(), "11");
interp.eval("double = lambda a: a*2").unwrap();
assert_eq!(interp.eval("double(5)").unwrap().to_string(), "10");
}
}