You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

157 lines
3.5 KiB

#[cfg(test)]
mod tests {
use crate::lexer::*;
#[test]
fn test_basic_tokenizing() {
let mut tokens = tokenize("1 = 2").into_iter();
assert_eq!(
tokens.nth(0).unwrap(),
Token {
len: 1,
kind: TokenKind::Literal(Value::Int),
raw: "1".to_owned()
}
);
assert_eq!(
tokens.nth(0).unwrap(),
Token {
len: 1,
kind: TokenKind::Whitespace,
raw: " ".to_owned()
}
);
assert_eq!(
tokens.nth(0).unwrap(),
Token {
len: 1,
kind: TokenKind::Equals,
raw: "=".to_owned()
}
);
assert_eq!(
tokens.nth(0).unwrap(),
Token {
len: 1,
kind: TokenKind::Whitespace,
raw: " ".to_owned()
}
);
assert_eq!(
tokens.nth(0).unwrap(),
Token {
len: 1,
kind: TokenKind::Literal(Value::Int),
raw: "2".to_owned()
}
);
}
#[test]
fn test_tokenizing_without_whitespace() {
let mut tokens = tokenize("1=2").into_iter();
assert_eq!(
tokens.nth(0).unwrap(),
Token {
len: 1,
kind: TokenKind::Literal(Value::Int),
raw: "1".to_owned()
}
);
assert_eq!(
tokens.nth(0).unwrap(),
Token {
len: 1,
kind: TokenKind::Equals,
raw: "=".to_owned()
}
);
assert_eq!(
tokens.nth(0).unwrap(),
Token {
len: 1,
kind: TokenKind::Literal(Value::Int),
raw: "2".to_owned()
}
);
}
#[test]
fn test_booleans() {
let mut tokens = tokenize("true false").into_iter();
assert_eq!(
tokens.nth(0).unwrap(),
Token {
len: 4,
kind: TokenKind::Keyword(Keyword::Boolean),
raw: "true".to_owned()
}
);
assert_eq!(
tokens.nth(1).unwrap(),
Token {
len: 5,
kind: TokenKind::Keyword(Keyword::Boolean),
raw: "false".to_owned()
}
);
}
#[test]
fn test_functions() {
let mut tokens = tokenize("fn fib() {}").into_iter();
assert_eq!(
tokens.nth(0).unwrap(),
Token {
len: 2,
kind: TokenKind::Keyword(Keyword::Function),
raw: "fn".to_owned()
}
);
}
#[test]
fn test_comments() {
let mut tokens = tokenize(
"
// foo
fn fib() {}
",
)
.into_iter()
.filter(|t| {
t.kind != TokenKind::Whitespace
&& t.kind != TokenKind::Tab
&& t.kind != TokenKind::CarriageReturn
});
assert_eq!(
tokens.nth(0).unwrap(),
Token {
len: 6,
kind: TokenKind::Comment,
raw: "// foo".to_owned(),
}
);
assert_eq!(
tokens.nth(0).unwrap(),
Token {
len: 2,
kind: TokenKind::Keyword(Keyword::Function),
raw: "fn".to_owned(),
}
);
}
}