extern crate xmachine;
use xmachine::{Machine, Value};
#[cfg(test)]
mod function_tests {
use super::*;
#[test]
fn function_return() {
let mut m = Machine::new();
m.push(Value::function(
|m: &mut Machine| {
m.push(Value::number(5));
},
&m,
));
m.call();
assert_eq!(m.stack, vec![Value::number(5)]);
let mut m = Machine::new();
m.push(Value::function(
|m: &mut Machine| {
m.push(Value::number(5));
m.push(Value::string("whoa"));
m.push(Value::tree());
},
&m,
));
m.call();
assert_eq!(
m.stack,
vec![Value::number(5), Value::string("whoa"), Value::tree()]
);
}
#[test]
fn function_copy() {
let mut m = Machine::new();
m.push(Value::string("yo yo yo"));
m.push(Value::string("test"));
m.store();
m.push(Value::number(5));
m.push(Value::function(
|m: &mut Machine| {
m.push(Value::string("test"));
m.load();
m.copy();
m.assign();
},
&m,
));
m.call();
assert_eq!(
m.registers[&String::from("test")],
Value::string("yo yo yo")
);
}
}