blob: 57921487acea15840d0e3e8cdbeaaa3814d086d3 (
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
|
mod interp;
mod parser;
#[cfg(test)]
mod tests {
use super::{
interp::{Interp, WordList},
parser::Parser
};
fn parser_for(text: &str) -> Parser {
let mut p = Parser::new(text);
p.parse().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 interp = Interp::new(p.wordlist);
interp.run().expect("should run to completion");
eprintln!("stack: {:?}", interp.stack);
assert_eq!(interp.stack.0.len(), 1, "factorial result stack len");
assert_eq!(interp.stack.0[0], 120, "factorial result value");
}
}
|