From 46f125d3de646f431e8ba5d0b90f1b5f8c870a3a Mon Sep 17 00:00:00 2001 From: Per Lindgren <per.lindgren@ltu.se> Date: Wed, 23 Sep 2020 16:49:17 +0200 Subject: [PATCH] all tests pass --- examples/scopes.rs | 12 ++++++++++++ examples/scopes_err.rs | 12 ++++++++++++ src/vm.rs | 2 +- tests/test_parser.rs | 21 +++++++++++---------- tests/test_vm.rs | 8 ++++---- 5 files changed, 40 insertions(+), 15 deletions(-) create mode 100644 examples/scopes.rs create mode 100644 examples/scopes_err.rs diff --git a/examples/scopes.rs b/examples/scopes.rs new file mode 100644 index 0000000..9dac1e1 --- /dev/null +++ b/examples/scopes.rs @@ -0,0 +1,12 @@ +fn main() { + let mut a = 7; + let mut b; + { + a = 5; + b = false; + let mut a = false; + a = true; + }; + a = 0; + b = true; +} diff --git a/examples/scopes_err.rs b/examples/scopes_err.rs new file mode 100644 index 0000000..ef2d7f6 --- /dev/null +++ b/examples/scopes_err.rs @@ -0,0 +1,12 @@ +fn main() { + let mut a = 7; + let mut b; + { + a = 5; + b = false; + let mut a = false; + a = true; + }; + a = false; + b = true; +} diff --git a/src/vm.rs b/src/vm.rs index 8e0aa62..bfe9005 100644 --- a/src/vm.rs +++ b/src/vm.rs @@ -286,7 +286,7 @@ fn eval_stmts(stmts: &Stmts, m: &mut Mem, fn_env: &FnEnv) -> Val { println!("block"); eval_stmts(block, m, fn_env) } - Stmt::Semi => panic!("ICE"), + Stmt::Semi => Val::Unit, } } m.pop_scope(); diff --git a/tests/test_parser.rs b/tests/test_parser.rs index f7e0dc4..67881ff 100644 --- a/tests/test_parser.rs +++ b/tests/test_parser.rs @@ -56,36 +56,37 @@ fn test_exprs() { #[test] fn test_stmts() { // test empty sequence - assert!(BlockParser::new().parse("").is_ok()); + assert!(BlockParser::new().parse("{}").is_ok()); // test let with no assignment and inferred type - assert!(BlockParser::new().parse("let a").is_ok()); + assert!(BlockParser::new().parse("{ let a }").is_ok()); // test let with no assignment and excplicit type - assert!(BlockParser::new().parse("let a : u32").is_ok()); + assert!(BlockParser::new().parse("{ let a : u32 }").is_ok()); // test let with inferred type - assert!(BlockParser::new().parse("let a = 0").is_ok()); + assert!(BlockParser::new().parse("{ let a = 0 }").is_ok()); // test let with explicit type - assert!(BlockParser::new().parse("let a : u16 = 1 + 2").is_ok()); + assert!(BlockParser::new().parse("{ let a : u16 = 1 + 2 }").is_ok()); // test assignment - assert!(BlockParser::new().parse("a = 1 + 2").is_ok()); + assert!(BlockParser::new().parse("{ a = 1 + 2 }").is_ok()); // test assignment - assert!(BlockParser::new().parse("*a = 1 + 2").is_ok()); + assert!(BlockParser::new().parse("{ *a = 1 + 2}").is_ok()); // test if then - assert!(BlockParser::new().parse("if a { b = 5 }").is_ok()); + assert!(BlockParser::new().parse("{ if a { b = 5 } }").is_ok()); // test if then else assert!(BlockParser::new() - .parse("if a { b = 5 } else { b = 7 }") + .parse("{ if a { b = 5 } else { b = 7 } }") .is_ok()); + // test hello assert!(BlockParser::new() - .parse("while hello(b) { b = b - 5 }") + .parse("{ while hello(b) { b = b - 5 } }") .is_ok()); } diff --git a/tests/test_vm.rs b/tests/test_vm.rs index 33d7729..f8998fc 100644 --- a/tests/test_vm.rs +++ b/tests/test_vm.rs @@ -55,13 +55,13 @@ fn while_test() { } #[test] -fn mut_test() { - eval_prog("examples/mut.rs"); +fn let_test() { + eval_prog("examples/let.rs"); } #[test] -fn mut2_test() { - eval_prog("examples/mut2.rs"); +fn let2_test() { + eval_prog("examples/let2.rs"); } #[test] -- GitLab