add a simple test

This commit is contained in:
numzero 2025-04-19 14:14:48 +03:00
parent f6ba112d95
commit 2f08fa0dab

View File

@ -393,3 +393,40 @@ impl OpenFunction {
} }
} }
} }
#[cfg(test)]
mod tests {
use crate::ast::*;
use super::build;
#[test]
fn test_local() {
let testee = Function {
name: Some("testee".into()),
args: vec![],
body: vec![
Statement::Assign {
target: Location::Variable { name: "x".into() },
source: Box::new(Expression::Constant(Constant::Number(1))),
},
Statement::Local {
name: "x".into(),
init: Some(Box::new(Expression::Constant(Constant::Number(2)))),
},
Statement::Assign {
target: Location::Variable { name: "x".into() },
source: Box::new(Expression::Constant(Constant::Number(3))),
},
],
ret: Some(Box::new(Expression::Variable(Location::Variable {
name: "x".into(),
}))),
};
let env = crate::types::Table::default();
let testee = build(&testee);
let ret = testee.call(Some(env.clone().into()), &[]);
assert_eq!(ret, Some(3.into()));
assert_eq!(env.get("x".into()), Some(1.into()));
}
}