From 6bf8c803681fffe7cb5185ac2408733c5786b4c8 Mon Sep 17 00:00:00 2001 From: Per Lindgren <per.lindgren@ltu.se> Date: Tue, 22 Sep 2020 23:43:52 +0200 Subject: [PATCH] test cleanup --- examples/assign2.rs | 11 ++++--- examples/assign3.rs | 7 +++++ examples/let_if.rs | 3 +- examples/mut.rs | 5 --- examples/mut2.rs | 8 ----- examples/w1_2.rs | 2 +- examples/wip.rs | 2 +- src/ast.rs | 3 +- src/env.rs | 36 +++++++++++----------- src/grammar.lalrpop | 15 +++------ tests/test_check.rs | 73 +++++++++++++++++++------------------------- tests/test_parser.rs | 20 ++++++------ 12 files changed, 83 insertions(+), 102 deletions(-) create mode 100644 examples/assign3.rs delete mode 100644 examples/mut.rs delete mode 100644 examples/mut2.rs diff --git a/examples/assign2.rs b/examples/assign2.rs index 31b644a..07a0c7f 100644 --- a/examples/assign2.rs +++ b/examples/assign2.rs @@ -1,6 +1,9 @@ -// test late assignment +// test late mut assignment fn main() { - let mut a; - a = 5; - let b = a; + let mut b; + b = false; + b = true; + let mut i; + i = 0; + i = i + 1; } diff --git a/examples/assign3.rs b/examples/assign3.rs new file mode 100644 index 0000000..5dbd8be --- /dev/null +++ b/examples/assign3.rs @@ -0,0 +1,7 @@ +// test late assignment +fn main() { + let b; + b = false; + let mut i; + i = 0; +} diff --git a/examples/let_if.rs b/examples/let_if.rs index 2a5d802..9d10e8f 100644 --- a/examples/let_if.rs +++ b/examples/let_if.rs @@ -1,4 +1,3 @@ fn main() { - //let a: i32 = if true { 1 } else { 2 }; - let a = 5; + let a: i32 = if true { 1 } else { 2 }; } diff --git a/examples/mut.rs b/examples/mut.rs deleted file mode 100644 index ec2e140..0000000 --- a/examples/mut.rs +++ /dev/null @@ -1,5 +0,0 @@ -fn main() { - let mut a = 0; - a = 2; - let b = a; -} diff --git a/examples/mut2.rs b/examples/mut2.rs deleted file mode 100644 index 33fd4af..0000000 --- a/examples/mut2.rs +++ /dev/null @@ -1,8 +0,0 @@ -fn main() { - let mut a = 0; - a = 2; - let mut b = a; // copy semantics - a = 3; - b = b + 1; - let c = a + b; -} diff --git a/examples/w1_2.rs b/examples/w1_2.rs index 83df078..dcf0536 100644 --- a/examples/w1_2.rs +++ b/examples/w1_2.rs @@ -54,7 +54,7 @@ fn c1(x: bool, y: bool) -> i32 { let mut c: i32 = 1; while (b < 10) { c = c * 2; - }; + } c } diff --git a/examples/wip.rs b/examples/wip.rs index 852c5b2..f195687 100644 --- a/examples/wip.rs +++ b/examples/wip.rs @@ -16,5 +16,5 @@ fn main() { } fn b(x: i32) -> i32 { - x; + x } diff --git a/src/ast.rs b/src/ast.rs index f57b199..18fb7b3 100644 --- a/src/ast.rs +++ b/src/ast.rs @@ -213,7 +213,6 @@ impl Display for Stmts { impl Stmts { fn ifmt(&self, fmt: &mut Formatter, indent: usize) -> Result<(), Error> { write!(fmt, "{{")?; - let len = self.stmts.len(); for s in &self.stmts { // set tab write!(fmt, "\n{}", " ".repeat(indent + 4))?; @@ -324,7 +323,7 @@ impl Display for Expr { } impl Expr { - fn ifmt(&self, fmt: &mut Formatter, indent: i32) -> Result<(), Error> { + fn _ifmt(&self, fmt: &mut Formatter, _indent: i32) -> Result<(), Error> { use self::Expr::*; match *self { Num(n) => write!(fmt, "{}", n), diff --git a/src/env.rs b/src/env.rs index e7ad73a..f7a0d92 100644 --- a/src/env.rs +++ b/src/env.rs @@ -187,21 +187,21 @@ fn test_type_env() { }; } -#[test] -fn fn_decl_env() { - use crate::*; - let p = grammar::ProgramParser::new().parse(fn_mixed!()).unwrap(); - let fn_env = new_fn_env(&p.fn_decls); - - assert_eq! { - **fn_env.get("main").unwrap(), - FnDecl { - id: "main".to_string(), - params: Params(vec![]), - result: Type::Unit, - body: Stmts{ stmts: vec![], ret: true } - } - }; - - println!("{}", p); -} +// #[test] +// fn fn_decl_env() { +// use crate::*; +// let p = grammar::ProgramParser::new().parse(fn_mixed!()).unwrap(); +// let fn_env = new_fn_env(&p.fn_decls); + +// assert_eq! { +// **fn_env.get("main").unwrap(), +// FnDecl { +// id: "main".to_string(), +// params: Params(vec![]), +// result: Type::Unit, +// body: Stmts{ stmts: vec![], trailing_semi: false } +// } +// }; + +// println!("{}", p); +// } diff --git a/src/grammar.lalrpop b/src/grammar.lalrpop index a1d4d65..38bf061 100644 --- a/src/grammar.lalrpop +++ b/src/grammar.lalrpop @@ -121,16 +121,11 @@ Type : Type = { } pub Block: Stmts = { - "{" <Stmt> "}" => - Stmts { - trailing_semi : match <> { - Stmt::Semi => true, - _ => false, - }, - stmts: vec![<>], - }, - "{" <stmts: StmtSeq*> "}" => { - let stmts: Vec<Stmt> = stmts.into_iter().flatten().collect(); + "{" <stmts: StmtSeq*> <stmt: Stmt?> "}" => { + let mut stmts: Vec<Stmt> = stmts.into_iter().flatten().collect(); + if let Some(stmt) = stmt { + stmts.push(stmt); + }; Stmts { trailing_semi: match &stmts.last() { Some(Stmt::Semi) => true, diff --git a/tests/test_check.rs b/tests/test_check.rs index ce824c1..72e0020 100644 --- a/tests/test_check.rs +++ b/tests/test_check.rs @@ -3,7 +3,7 @@ use erode::read_file; #[test] fn check_w1_2() { - assert!(check(&read_file::parse("examples/w1_2.rs")).is_ok()); + check(&read_file::parse("examples/w1_2.rs")).unwrap(); } #[test] @@ -13,32 +13,32 @@ fn check_prog() { #[test] fn check_assign() { - assert!(check(&read_file::parse("examples/assign.rs")).is_ok()); + check(&read_file::parse("examples/assign.rs")).unwrap(); } #[test] fn check_assign2() { - assert!(check(&read_file::parse("examples/assign2.rs")).is_ok()); + check(&read_file::parse("examples/assign2.rs")).unwrap(); } #[test] fn check_assign3() { - assert!(check(&read_file::parse("examples/assign3.rs")).is_ok()); + check(&read_file::parse("examples/assign3.rs")).unwrap(); } #[test] fn check_assign_err() { - assert!(check(&read_file::parse("examples/assign_err.rs")).is_err()); + check(&read_file::parse("examples/assign_err.rs")).unwrap_err(); } #[test] fn check_assign_err2() { - assert!(check(&read_file::parse("examples/assign_err2.rs")).is_err()); + check(&read_file::parse("examples/assign_err2.rs")).unwrap_err(); } #[test] fn check_assign_err3() { - assert!(check(&read_file::parse("examples/assign_err3.rs")).is_err()); + check(&read_file::parse("examples/assign_err3.rs")).unwrap_err(); } #[test] @@ -48,134 +48,125 @@ fn check_let() { #[test] fn check_let2() { - assert!(check(&read_file::parse("examples/let2.rs")).is_ok()); + check(&read_file::parse("examples/let2.rs")).unwrap(); } #[test] fn check_call() { - assert!(check(&read_file::parse("examples/call.rs")).is_ok()); + check(&read_file::parse("examples/call.rs")).unwrap(); } #[test] fn check_call2() { - assert!(check(&read_file::parse("examples/call2.rs")).is_ok()); + check(&read_file::parse("examples/call2.rs")).unwrap(); } #[test] fn check_call3() { - assert!(check(&read_file::parse("examples/call3.rs")).is_ok()); + check(&read_file::parse("examples/call3.rs")).unwrap(); } #[test] fn check_call_err() { - assert!(check(&read_file::parse("examples/call_err.rs")).is_err()); + check(&read_file::parse("examples/call_err.rs")).unwrap_err(); } #[test] fn check_call_err2() { - assert!(check(&read_file::parse("examples/call_err2.rs")).is_err()); -} -#[test] -fn check_mut() { - assert!(check(&read_file::parse("examples/mut.rs")).is_ok()); -} - -#[test] -fn check_mut2() { - assert!(check(&read_file::parse("examples/mut2.rs")).is_ok()); + check(&read_file::parse("examples/call_err2.rs")).unwrap_err(); } #[test] fn check_type_err() { - assert!(check(&read_file::parse("examples/type_err.rs")).is_err()); + check(&read_file::parse("examples/type_err.rs")).unwrap_err(); } #[test] fn check_type_err2() { - assert!(check(&read_file::parse("examples/type_err2.rs")).is_err()); + check(&read_file::parse("examples/type_err2.rs")).unwrap_err(); } #[test] fn check_if() { - assert!(check(&read_file::parse("examples/if.rs")).is_ok()); + check(&read_file::parse("examples/if.rs")).unwrap(); } #[test] fn check_while() { - assert!(check(&read_file::parse("examples/while.rs")).is_ok()); + check(&read_file::parse("examples/while.rs")).unwrap(); } #[test] fn check_deref_assign() { - assert!(check(&read_file::parse("examples/deref_assign.rs")).is_ok()); + check(&read_file::parse("examples/deref_assign.rs")).unwrap(); } #[test] fn check_deref_assign2() { - assert!(check(&read_file::parse("examples/deref_assign2.rs")).is_ok()); + check(&read_file::parse("examples/deref_assign2.rs")).unwrap(); } #[test] fn check_ref() { - assert!(check(&read_file::parse("examples/ref.rs")).is_ok()); + check(&read_file::parse("examples/ref.rs")).unwrap(); } #[test] fn check_ref2() { - assert!(check(&read_file::parse("examples/ref2.rs")).is_ok()); + check(&read_file::parse("examples/ref2.rs")).unwrap(); } #[test] fn check_ref3() { - assert!(check(&read_file::parse("examples/ref3.rs")).is_ok()); + check(&read_file::parse("examples/ref3.rs")).unwrap(); } #[test] fn check_ref4() { - assert!(check(&read_file::parse("examples/ref4.rs")).is_ok()); + check(&read_file::parse("examples/ref4.rs")).unwrap(); } #[test] fn check_ref5() { - assert!(check(&read_file::parse("examples/ref5.rs")).is_ok()); + check(&read_file::parse("examples/ref5.rs")).unwrap(); } #[test] fn check_ref_err() { - assert!(check(&read_file::parse("examples/ref_err.rs")).is_err()); + check(&read_file::parse("examples/ref_err.rs")).unwrap_err(); } #[test] fn check_ref_err2() { - assert!(check(&read_file::parse("examples/ref_err2.rs")).is_err()); + check(&read_file::parse("examples/ref_err2.rs")).unwrap_err(); } #[test] fn check_ref_err3() { - assert!(check(&read_file::parse("examples/ref_err3.rs")).is_err()); + check(&read_file::parse("examples/ref_err3.rs")).unwrap_err(); } #[test] fn check_ref_err4() { - assert!(check(&read_file::parse("examples/ref_err4.rs")).is_err()); + check(&read_file::parse("examples/ref_err4.rs")).unwrap_err(); } #[test] fn check_scopes() { - assert!(check(&read_file::parse("examples/scopes.rs")).is_ok()); + check(&read_file::parse("examples/scopes.rs")).unwrap(); } #[test] fn check_scopes_err() { - assert!(check(&read_file::parse("examples/scopes_err.rs")).is_err()); + check(&read_file::parse("examples/scopes_err.rs")).unwrap_err(); } #[test] fn check_let_if() { - assert!(check(&read_file::parse("examples/let_if.rs")).is_err()); + check(&read_file::parse("examples/let_if.rs")).unwrap(); } #[test] fn wip() { - let _ = check(&read_file::parse("examples/wip.rs")).unwrap(); + check(&read_file::parse("examples/wip.rs")).unwrap(); } diff --git a/tests/test_parser.rs b/tests/test_parser.rs index f5a7180..f7e0dc4 100644 --- a/tests/test_parser.rs +++ b/tests/test_parser.rs @@ -56,35 +56,35 @@ fn test_exprs() { #[test] fn test_stmts() { // test empty sequence - assert!(StmtsParser::new().parse("").is_ok()); + assert!(BlockParser::new().parse("").is_ok()); // test let with no assignment and inferred type - assert!(StmtsParser::new().parse("let a").is_ok()); + assert!(BlockParser::new().parse("let a").is_ok()); // test let with no assignment and excplicit type - assert!(StmtsParser::new().parse("let a : u32").is_ok()); + assert!(BlockParser::new().parse("let a : u32").is_ok()); // test let with inferred type - assert!(StmtsParser::new().parse("let a = 0").is_ok()); + assert!(BlockParser::new().parse("let a = 0").is_ok()); // test let with explicit type - assert!(StmtsParser::new().parse("let a : u16 = 1 + 2").is_ok()); + assert!(BlockParser::new().parse("let a : u16 = 1 + 2").is_ok()); // test assignment - assert!(StmtsParser::new().parse("a = 1 + 2").is_ok()); + assert!(BlockParser::new().parse("a = 1 + 2").is_ok()); // test assignment - assert!(StmtsParser::new().parse("*a = 1 + 2").is_ok()); + assert!(BlockParser::new().parse("*a = 1 + 2").is_ok()); // test if then - assert!(StmtsParser::new().parse("if a { b = 5 }").is_ok()); + assert!(BlockParser::new().parse("if a { b = 5 }").is_ok()); // test if then else - assert!(StmtsParser::new() + assert!(BlockParser::new() .parse("if a { b = 5 } else { b = 7 }") .is_ok()); - assert!(StmtsParser::new() + assert!(BlockParser::new() .parse("while hello(b) { b = b - 5 }") .is_ok()); } -- GitLab