rtforth/
env.rs

1//! Environemnt word set
2
3use core::Core;
4
5pub trait Environment: Core {
6    /// Add environment queries.
7    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    /// Run-time: ( -- n )
13    ///
14    /// Largest usable signed integer
15    fn max_n(&mut self) {
16        self.s_stack().push(isize::max_value());
17    }
18
19    /// Run-time: ( -- u )
20    ///
21    /// Largest usable unsigned integer
22    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}