use core::Core;
pub trait Environment: Core {
fn add_environment(&mut self) {
self.add_primitive("max-n", Environment::max_n);
self.add_primitive("max-u", Environment::max_u);
}
fn max_n(&mut self) {
self.s_stack().push(isize::max_value());
}
fn max_u(&mut self) {
self.s_stack().push(usize::max_value() as isize);
}
}
#[cfg(test)]
mod tests {
use core::Core;
use mock_vm::VM;
#[test]
fn test_max_n() {
let vm = &mut VM::new();
vm.set_source("max-n dup 1+ +");
vm.evaluate_input();
assert_eq!(vm.last_error(), None);
match vm.s_stack().pop() {
t => assert_eq!(t, -1),
}
}
#[test]
fn test_max_u() {
let vm = &mut VM::new();
vm.set_source("max-u 1+");
vm.evaluate_input();
assert_eq!(vm.last_error(), None);
match vm.s_stack().pop() {
t => assert_eq!(t, 0),
}
}
}