extern crate xmachine;
use xmachine::{Machine, Value};
#[cfg(test)]
mod iterative {
use super::*;
fn sub(m: &mut Machine) {
let n1 = m.get_arg();
let n2 = m.get_arg();
m.return_value(n1 - n2);
}
#[test]
fn while_loop() {
let mut m = Machine::new();
m.push(Value::function(sub, &m));
m.push(Value::string("sub"));
m.store();
m.push(Value::number(5));
m.push(Value::string("test"));
m.store();
m.push(Value::function(
|m: &mut Machine| {
m.push(Value::string("test"));
m.load();
m.push(Value::number(1));
m.push(Value::string("test"));
m.load();
m.push(Value::string("sub"));
m.load();
m.call();
m.push(Value::string("test"));
m.store();
},
&m,
));
m.push(Value::function(
|m: &mut Machine| {
m.push(Value::string("test"));
m.load();
},
&m,
));
m.while_loop();
assert_eq!(
m.stack,
vec![
Value::number(5),
Value::number(4),
Value::number(3),
Value::number(2),
Value::number(1),
]
)
}
}