blob: cd743b9274af6fe7d4c7c34b4b5962404b0d0769 (
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
|
use automathon::forth::{
compiler::Compiler,
vm::{VM, WordList},
};
fn compiler_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]);
}
}
#[test]
fn factorial() {
let prog = ": fac dup 1 > if dup 1 - fac * then ; 5 fac\n";
let comp = compiler_for(prog);
eprintwordlist(&comp.wordlist);
let mut vm = VM::new(comp.wordlist);
vm.run().expect("should run to completion");
assert_eq!(vm.stack.0, vec![120], "result stack");
}
|