1use core::Core;
4
5pub trait Environment: Core {
6 fn add_environment(&mut self) {
8 self.add_primitive("max-n", Environment::max_n);
9 self.add_primitive("max-u", Environment::max_u);
10 }
11
12 fn max_n(&mut self) {
16 self.s_stack().push(isize::max_value());
17 }
18
19 fn max_u(&mut self) {
23 self.s_stack().push(usize::max_value() as isize);
24 }
25}
26
27#[cfg(test)]
28mod tests {
29 use core::Core;
30 use mock_vm::VM;
31
32 #[test]
33 fn test_max_n() {
34 let vm = &mut VM::new();
35 vm.set_source("max-n dup 1+ +");
36 vm.evaluate_input();
37 assert_eq!(vm.last_error(), None);
38 match vm.s_stack().pop() {
39 t => assert_eq!(t, -1),
40 }
41 }
42 #[test]
43
44 fn test_max_u() {
45 let vm = &mut VM::new();
46 vm.set_source("max-u 1+");
47 vm.evaluate_input();
48 assert_eq!(vm.last_error(), None);
49 match vm.s_stack().pop() {
50 t => assert_eq!(t, 0),
51 }
52 }
53}