More concise test macros
This commit is contained in:
parent
9813609ad7
commit
1e9aa91c5d
1
TODO.md
1
TODO.md
@ -1,6 +1,7 @@
|
|||||||
|
|
||||||
# TODO Items
|
# TODO Items
|
||||||
|
|
||||||
|
-fuzz test schala
|
||||||
|
|
||||||
*A neat idea for pattern matching optimization would be if you could match on one of several things in a list
|
*A neat idea for pattern matching optimization would be if you could match on one of several things in a list
|
||||||
ex:
|
ex:
|
||||||
|
@ -1090,6 +1090,7 @@ fn parse_hex(digits: String) -> ParseResult<u64> {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod parse_tests {
|
mod parse_tests {
|
||||||
use ::std::rc::Rc;
|
use ::std::rc::Rc;
|
||||||
|
use super::tokenize;
|
||||||
use super::ParseResult;
|
use super::ParseResult;
|
||||||
use builtin::{PrefixOp, BinOp};
|
use builtin::{PrefixOp, BinOp};
|
||||||
use ast::{AST, Expression, Statement, IfExpressionBody, Discriminator, Pattern, PatternLiteral, TypeBody, Enumerator, ForBody};
|
use ast::{AST, Expression, Statement, IfExpressionBody, Discriminator, Pattern, PatternLiteral, TypeBody, Enumerator, ForBody};
|
||||||
@ -1103,7 +1104,6 @@ mod parse_tests {
|
|||||||
use super::ForBody::*;
|
use super::ForBody::*;
|
||||||
|
|
||||||
fn parse(input: &str) -> ParseResult<AST> {
|
fn parse(input: &str) -> ParseResult<AST> {
|
||||||
use super::tokenize;
|
|
||||||
let tokens: Vec<::tokenizing::Token> = tokenize(input);
|
let tokens: Vec<::tokenizing::Token> = tokenize(input);
|
||||||
let mut parser = super::Parser::new(tokens);
|
let mut parser = super::Parser::new(tokens);
|
||||||
parser.parse()
|
parser.parse()
|
||||||
@ -1124,6 +1124,13 @@ mod parse_tests {
|
|||||||
macro_rules! exprstatement {
|
macro_rules! exprstatement {
|
||||||
($expr_type:expr) => { Statement::ExpressionStatement(Expression($expr_type, None)) };
|
($expr_type:expr) => { Statement::ExpressionStatement(Expression($expr_type, None)) };
|
||||||
($expr_type:expr, $type_anno:expr) => { Statement::ExpressionStatement(Expression($expr_type, Some($type_anno))) };
|
($expr_type:expr, $type_anno:expr) => { Statement::ExpressionStatement(Expression($expr_type, Some($type_anno))) };
|
||||||
|
(s $statement_text:expr) => {
|
||||||
|
{
|
||||||
|
let tokens: Vec<::tokenizing::Token> = tokenize($statement_text);
|
||||||
|
let mut parser = super::Parser::new(tokens);
|
||||||
|
parser.statement().unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
macro_rules! ty {
|
macro_rules! ty {
|
||||||
($name:expr) => { Singleton(tys!($name)) }
|
($name:expr) => { Singleton(tys!($name)) }
|
||||||
@ -1132,7 +1139,6 @@ mod parse_tests {
|
|||||||
($name:expr) => { TypeSingletonName { name: Rc::new($name.to_string()), params: vec![] } };
|
($name:expr) => { TypeSingletonName { name: Rc::new($name.to_string()), params: vec![] } };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* new style of test macros */
|
/* new style of test macros */
|
||||||
|
|
||||||
macro_rules! single_expr {
|
macro_rules! single_expr {
|
||||||
@ -1140,8 +1146,16 @@ mod parse_tests {
|
|||||||
($exprtype:expr, $type:expr) => { AST(vec![Statement::ExpressionStatement(Expression($exprtype, $type))]) }
|
($exprtype:expr, $type:expr) => { AST(vec![Statement::ExpressionStatement(Expression($exprtype, $type))]) }
|
||||||
}
|
}
|
||||||
macro_rules! ex {
|
macro_rules! ex {
|
||||||
($expr_type:expr) => { Expression($expr_type, None) }
|
($expr_type:expr) => { Expression($expr_type, None) };
|
||||||
|
(s $expr_text:expr) => {
|
||||||
|
{
|
||||||
|
let tokens: Vec<::tokenizing::Token> = tokenize($expr_text);
|
||||||
|
let mut parser = super::Parser::new(tokens);
|
||||||
|
parser.expression().unwrap()
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! binexp {
|
macro_rules! binexp {
|
||||||
($op:expr, $lhs:expr, $rhs:expr) => { BinExp(BinOp::from_sigil($op), bx!(Expression($lhs, None)), bx!(Expression($rhs, None))) }
|
($op:expr, $lhs:expr, $rhs:expr) => { BinExp(BinOp::from_sigil($op), bx!(Expression($lhs, None)), bx!(Expression($rhs, None))) }
|
||||||
}
|
}
|
||||||
@ -1201,7 +1215,7 @@ mod parse_tests {
|
|||||||
parse_test!("()", AST(vec![exprstatement!(TupleLiteral(vec![]))]));
|
parse_test!("()", AST(vec![exprstatement!(TupleLiteral(vec![]))]));
|
||||||
parse_test!("(\"hella\", 34)", AST(vec![exprstatement!(
|
parse_test!("(\"hella\", 34)", AST(vec![exprstatement!(
|
||||||
TupleLiteral(
|
TupleLiteral(
|
||||||
vec![ex!(StringLiteral(rc!(hella))), ex!(NatLiteral(34))]
|
vec![ex!(s r#""hella""#), ex!(s "34")]
|
||||||
)
|
)
|
||||||
)]));
|
)]));
|
||||||
parse_test!("((1+2), \"slough\")", AST(vec![exprstatement!(TupleLiteral(vec![
|
parse_test!("((1+2), \"slough\")", AST(vec![exprstatement!(TupleLiteral(vec![
|
||||||
@ -1500,7 +1514,7 @@ fn a(x) {
|
|||||||
exprstatement!(Lambda {
|
exprstatement!(Lambda {
|
||||||
params: vec![(rc!(x), Some(ty!("Int")))],
|
params: vec![(rc!(x), Some(ty!("Int")))],
|
||||||
type_anno: Some(ty!("String")),
|
type_anno: Some(ty!("String")),
|
||||||
body: vec![exprstatement!(StringLiteral(rc!(q)))]
|
body: vec![exprstatement!(s r#""q""#)]
|
||||||
})
|
})
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user