added a bit of tests
This commit is contained in:
parent
9e45589810
commit
c49b36a1e9
59
src/lexer.rs
59
src/lexer.rs
|
@ -73,3 +73,62 @@ impl<'a> Display for Token<'a> {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use Token::*;
|
||||
|
||||
fn assert_lex(src: &str, expected: &[Token]) {
|
||||
assert_eq!(Token::lexer(src).collect::<Vec<_>>(), expected)
|
||||
}
|
||||
#[test]
|
||||
fn gibberish() {
|
||||
assert_lex(
|
||||
"(][)}'{\"ABLE\"corp :wisp ¨",
|
||||
&[
|
||||
LeftParen,
|
||||
RightBracket,
|
||||
LeftBracket,
|
||||
RightParen,
|
||||
RightCurly,
|
||||
Quote,
|
||||
LeftCurly,
|
||||
String("ABLE"),
|
||||
Symbol("corp"),
|
||||
Keyword("wisp"),
|
||||
Error,
|
||||
],
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn function() {
|
||||
assert_lex(
|
||||
"(defun print-add [x y] (println (add x y))) (print-add 42 12)",
|
||||
&[
|
||||
LeftParen,
|
||||
Symbol("defun"),
|
||||
Symbol("print-add"),
|
||||
LeftBracket,
|
||||
Symbol("x"),
|
||||
Symbol("y"),
|
||||
RightBracket,
|
||||
LeftParen,
|
||||
Symbol("println"),
|
||||
LeftParen,
|
||||
Symbol("add"),
|
||||
Symbol("x"),
|
||||
Symbol("y"),
|
||||
RightParen,
|
||||
RightParen,
|
||||
RightParen,
|
||||
LeftParen,
|
||||
Symbol("print-add"),
|
||||
Number(42.0.into()),
|
||||
Number(12.0.into()),
|
||||
RightParen,
|
||||
],
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,3 +61,28 @@ fn stream_of_lexer<'a>(
|
|||
let len = lexer.source().len();
|
||||
Stream::from_iter(len..len + 1, lexer.spanned())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
fn assert_parse(src: &str, expected: &[Value]) {
|
||||
assert_eq!(read(src).unwrap(), expected)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn simple_fn() {
|
||||
assert_parse(
|
||||
"(defn test [] (println \"Hello, world!\"))",
|
||||
&[Value::List(Box::new(List::from_vec(vec![
|
||||
Value::Symbol("defn".into()),
|
||||
Value::Symbol("test".into()),
|
||||
Value::Vector(vec![]),
|
||||
Value::List(Box::new(List::from_vec(vec![
|
||||
Value::Symbol("println".into()),
|
||||
Value::String("Hello, world!".into()),
|
||||
]))),
|
||||
])))],
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue