blob: f244ef4dbf744880903de206aaf187466dad3193 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
pub mod compiler;
pub mod vm;
#[cfg(test)]
mod tests {
use super::{
vm::{VM, WordList},
compiler::Compiler,
};
fn parser_for(text: &str) -> Compiler {
let mut p = Compiler::new(text);
p.compile().expect("badparse");
p
}
fn eprintwordlist(wordlist: &WordList) {
for i in 0..wordlist.0.len() {
eprintln!("wordlist[{}]: {:?}", i, wordlist.0[i]);
}
}
// recursive!
#[test]
fn fac() {
let prog = ": fac dup 1 > if dup 1 - fac * then ; 5 fac\n";
let p = parser_for(prog);
eprintwordlist(&p.wordlist);
let mut vm = VM::new(p.wordlist);
vm.run().expect("should run to completion");
eprintln!("stack: {:?}", vm.stack);
assert_eq!(vm.stack.0.len(), 1, "factorial result stack len");
assert_eq!(vm.stack.0[0], 120, "factorial result value");
}
}
|