File tree Expand file tree Collapse file tree 1 file changed +71
-0
lines changed
Expand file tree Collapse file tree 1 file changed +71
-0
lines changed Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments