From 5f8be98da728d3fbdd4fa8072f4fb77db8237df9 Mon Sep 17 00:00:00 2001 From: Nilstrieb <48135649+Nilstrieb@users.noreply.github.com> Date: Tue, 2 Nov 2021 21:09:07 +0100 Subject: [PATCH] fn tests --- src/parse/test.rs | 83 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/src/parse/test.rs b/src/parse/test.rs index 05c752d..3372a9e 100644 --- a/src/parse/test.rs +++ b/src/parse/test.rs @@ -66,6 +66,89 @@ fn test_number_literal>) -> Expr>(parser: F) { assert_eq!(num_lit(10.0), unary); } +mod r#fn { + use super::prelude::*; + + fn parse_fn(tokens: Vec) -> Stmt { + let mut parser = parser(tokens); + parser.fn_decl().unwrap() + } + + #[test] + fn empty() { + let tokens = [Fn, Ident("empty"), ParenO, ParenC, BraceO, BraceC] + .map(token) + .into(); + let ast = parse_fn(tokens); + assert_eq!( + Stmt::FnDecl(FnDecl { + span: Span::dummy(), + name: Ident { + name: "empty".to_string(), + span: Default::default() + }, + params: vec![], + body: Block { + stmts: vec![], + span: Default::default() + } + }), + ast + ); + } + + #[test] + fn params_body() { + let tokens = [ + Fn, + Ident("empty"), + ParenO, + Ident("a"), + Comma, + Ident("b"), + ParenC, + BraceO, + Number(10.0), + Plus, + Number(20.0), + Semi, + BraceC, + ] + .map(token) + .into(); + let ast = parse_fn(tokens); + assert_eq!( + Stmt::FnDecl(FnDecl { + span: Span::dummy(), + name: Ident { + name: "empty".to_string(), + span: Default::default() + }, + params: vec![ + Ident { + name: "a".to_string(), + span: Default::default() + }, + Ident { + name: "b".to_string(), + span: Default::default() + } + ], + body: Block { + stmts: vec![Stmt::Expr(Expr::BinaryOp(Box::new(BinaryOp { + span: Default::default(), + lhs: num_lit(10.0), + rhs: num_lit(20.0), + kind: BinaryOpKind::Add, + })))], + span: Default::default() + } + }), + ast + ); + } +} + mod r#if { use super::prelude::*;