Skip to content

Commit 38460af

Browse files
committed
tests
1 parent 422ca10 commit 38460af

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

zenlang/tests/vm_environ.rs

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
extern crate alloc;
2+
3+
use zenlang::compiler::*;
4+
use zenlang::parser::*;
5+
use zenlang::tokenizer::*;
6+
use zenlang::value::*;
7+
use zenlang::vm::*;
8+
9+
fn expect_to_return(code: String, value: Value) {
10+
let mut tokenizer = Tokenizer::new(code);
11+
let mut parser = Parser::new(&mut tokenizer);
12+
let mut compiler = Compiler::new(&mut parser);
13+
if let Err(e) = compiler.compile() {
14+
assert_eq!(e, "");
15+
}
16+
let mut vm = VM::new();
17+
let module = compiler.get_module();
18+
println!("{:?}", module.opcodes);
19+
20+
let _ = vm.load_module(&zenlang::stdlib::compile_stdlib_module());
21+
let _ = vm.load_module(module);
22+
23+
if let Err(e) = vm.set_entry_function("main") {
24+
assert_eq!(e, "");
25+
}
26+
27+
vm.run_until_halt();
28+
29+
println!("vm.ret: {:?}", vm.ret);
30+
assert_eq!(vm.error, "");
31+
assert!(vm.ret.equal(&value, &vm));
32+
}
33+
34+
#[test]
35+
fn vm_test_environ_1() {
36+
expect_to_return(
37+
r#"
38+
fn f {
39+
let x = 5;
40+
return null;
41+
}
42+
43+
fn main {
44+
f();
45+
return x;
46+
}
47+
"#
48+
.into(),
49+
Value::Null(),
50+
);
51+
}
52+
53+
#[test]
54+
fn vm_test_environ_2() {
55+
expect_to_return(
56+
r#"
57+
fn f {
58+
let x = 5;
59+
return null;
60+
}
61+
62+
fn main {
63+
let x = 3;
64+
f();
65+
return x;
66+
}
67+
"#
68+
.into(),
69+
Value::Number(3.0),
70+
);
71+
}

0 commit comments

Comments
 (0)