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"); }