fddl/tests/lexer_tests.rs

137 lines
3.2 KiB
Rust
Raw Permalink Normal View History

use fddl::lexer::Lexer;
use fddl::lexer::token::Token;
#[test]
fn test_single_tokens() {
let source = String::from("()+-*/;");
let mut lexer = Lexer::new(source);
let tokens = lexer.scan_tokens();
assert_eq!(
tokens,
vec![
Token::LeftParen,
Token::RightParen,
Token::Plus,
Token::Minus,
Token::Star,
Token::Slash,
Token::Semicolon,
Token::EOF
]
);
}
#[test]
fn test_keywords_and_identifiers() {
let source = String::from("sym myVar = 123;");
let mut lexer = Lexer::new(source);
let tokens = lexer.scan_tokens();
assert_eq!(
tokens,
vec![
Token::Sym,
Token::Identifier("myVar".to_string()),
Token::Equal,
Token::Number(123.0),
Token::Semicolon,
Token::EOF
]
);
println!("{:?}", tokens);
}
#[test]
fn test_pub_keyword() {
let source = String::from("pub func example() { return 42; }");
let mut lexer = Lexer::new(source);
let tokens = lexer.scan_tokens();
assert_eq!(
tokens,
vec![
Token::Pub,
Token::Func,
Token::Identifier("example".to_string()),
Token::LeftParen,
Token::RightParen,
Token::LeftBrace,
Token::Return,
Token::Number(42.0),
Token::Semicolon,
Token::RightBrace,
Token::EOF
]
);
}
#[test]
fn test_comments() {
let source = String::from("# This is a comment\nlet a = 5;");
let mut lexer = Lexer::new(source);
let tokens = lexer.scan_tokens();
assert_eq!(
tokens,
vec![
Token::Comment(" This is a comment".to_string()),
Token::Let,
Token::Identifier("a".to_string()),
Token::Equal,
Token::Number(5.0),
Token::Semicolon,
Token::EOF
]
);
}
#[test]
fn test_operators_and_comparison() {
let source = String::from("a >= 10 != b == 5;");
let mut lexer = Lexer::new(source);
let tokens = lexer.scan_tokens();
assert_eq!(
tokens,
vec![
Token::Identifier("a".to_string()),
Token::GreaterEqual,
Token::Number(10.0),
Token::BangEqual,
Token::Identifier("b".to_string()),
Token::EqualEqual,
Token::Number(5.0),
Token::Semicolon,
Token::EOF
]
);
}
#[test]
fn test_tilde_operator() {
let source = String::from("if (a != b) { let c = ~5; }");
let mut lexer = Lexer::new(source);
let tokens = lexer.scan_tokens();
assert_eq!(
tokens,
vec![
Token::If,
Token::LeftParen,
Token::Identifier("a".to_string()),
Token::BangEqual,
Token::Identifier("b".to_string()),
Token::RightParen,
Token::LeftBrace,
Token::Let,
Token::Identifier("c".to_string()),
Token::Equal,
Token::Tilde,
Token::Number(5.0),
Token::Semicolon,
Token::RightBrace,
Token::EOF
]
);
}