mirror of https://git.sr.ht/~garritfra/sabre
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.
174 lines
4.0 KiB
174 lines
4.0 KiB
3 years ago
|
#[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 {
|
||
|
kind: LiteralKind::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 {
|
||
|
kind: LiteralKind::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 {
|
||
|
kind: LiteralKind::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 {
|
||
|
kind: LiteralKind::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::Identifier {
|
||
|
kind: IdentifierKind::Boolean
|
||
|
},
|
||
|
raw: "true".to_owned()
|
||
|
}
|
||
|
);
|
||
|
|
||
|
assert_eq!(
|
||
|
tokens.nth(1).unwrap(),
|
||
|
Token {
|
||
|
len: 5,
|
||
|
kind: TokenKind::Identifier {
|
||
|
kind: IdentifierKind::Boolean
|
||
|
},
|
||
|
raw: "false".to_owned()
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn test_functions() {
|
||
|
let mut tokens = tokenize("fn fib n:").into_iter();
|
||
|
|
||
|
assert_eq!(
|
||
|
tokens.nth(0).unwrap(),
|
||
|
Token {
|
||
|
len: 2,
|
||
|
kind: TokenKind::Identifier {
|
||
|
kind: IdentifierKind::Function
|
||
|
},
|
||
|
raw: "fn".to_owned()
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn test_comments() {
|
||
|
let mut tokens = tokenize(
|
||
|
"
|
||
|
-- foo
|
||
|
fn fib n:
|
||
|
",
|
||
|
)
|
||
|
.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::Identifier {
|
||
|
kind: IdentifierKind::Function
|
||
|
},
|
||
|
raw: "fn".to_owned(),
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
}
|