Add a failing test that the lexer finds rational numbers

This commit is contained in:
Eryn Wells 2017-04-15 10:35:13 -07:00
parent 636b0dda9b
commit f9d9a08455
2 changed files with 16 additions and 5 deletions

View file

@ -41,10 +41,6 @@ enum State {
StringEscape,
}
pub fn lex(input: &str) -> Lexer {
Lexer::new(&input)
}
pub struct Lexer {
input: String,
begin: usize,

View file

@ -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() {