Add a failing test that the lexer finds rational numbers
This commit is contained in:
parent
636b0dda9b
commit
f9d9a08455
2 changed files with 16 additions and 5 deletions
|
@ -41,10 +41,6 @@ enum State {
|
|||
StringEscape,
|
||||
}
|
||||
|
||||
pub fn lex(input: &str) -> Lexer {
|
||||
Lexer::new(&input)
|
||||
}
|
||||
|
||||
pub struct Lexer {
|
||||
input: String,
|
||||
begin: usize,
|
||||
|
|
|
@ -8,10 +8,18 @@ mod number;
|
|||
mod str;
|
||||
mod token;
|
||||
|
||||
pub use lexer::Lexer;
|
||||
pub use token::Token;
|
||||
|
||||
pub fn lex(input: &str) -> Lexer {
|
||||
Lexer::new(&input)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use sibiltypes::{Bool, Char, Number};
|
||||
use std::iter::Iterator;
|
||||
use super::lex;
|
||||
use lexer::Lexer;
|
||||
use token::Token;
|
||||
|
||||
|
@ -81,6 +89,12 @@ mod tests {
|
|||
check_single_token("0.34", Token::Number(Number::from_float(0.34, false)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn finds_rational_numbers() {
|
||||
check_single_token("3/2", Token::Number(Number::from_quotient(3, 2, true)));
|
||||
check_single_token("-3/2", Token::Number(Number::from_quotient(-3, 2, true)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn finds_negative_numbers() {
|
||||
check_single_token("-3", Token::Number(Number::from_int(-3, true)));
|
||||
|
@ -110,6 +124,7 @@ mod tests {
|
|||
fn finds_exact_numbers() {
|
||||
check_single_token("#e45", Token::Number(Number::from_int(45, true)));
|
||||
check_single_token("#e-45", Token::Number(Number::from_int(-45, true)));
|
||||
check_single_token("#e4.5", Token::Number(Number::from_float(4.5, true)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -149,7 +164,7 @@ mod tests {
|
|||
}
|
||||
|
||||
fn check_tokens(input: &str, expected: Vec<Token>) {
|
||||
let lexer = Lexer::new(input);
|
||||
let lexer = lex(input);
|
||||
let mut expected_iter = expected.iter();
|
||||
for lex in lexer {
|
||||
if let Some(expected_token) = expected_iter.next() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue