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, StringEscape,
} }
pub fn lex(input: &str) -> Lexer {
Lexer::new(&input)
}
pub struct Lexer { pub struct Lexer {
input: String, input: String,
begin: usize, begin: usize,

View file

@ -8,10 +8,18 @@ mod number;
mod str; mod str;
mod token; mod token;
pub use lexer::Lexer;
pub use token::Token;
pub fn lex(input: &str) -> Lexer {
Lexer::new(&input)
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use sibiltypes::{Bool, Char, Number}; use sibiltypes::{Bool, Char, Number};
use std::iter::Iterator; use std::iter::Iterator;
use super::lex;
use lexer::Lexer; use lexer::Lexer;
use token::Token; use token::Token;
@ -81,6 +89,12 @@ mod tests {
check_single_token("0.34", Token::Number(Number::from_float(0.34, false))); 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] #[test]
fn finds_negative_numbers() { fn finds_negative_numbers() {
check_single_token("-3", Token::Number(Number::from_int(-3, true))); check_single_token("-3", Token::Number(Number::from_int(-3, true)));
@ -110,6 +124,7 @@ mod tests {
fn finds_exact_numbers() { fn finds_exact_numbers() {
check_single_token("#e45", Token::Number(Number::from_int(45, true))); 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("#e-45", Token::Number(Number::from_int(-45, true)));
check_single_token("#e4.5", Token::Number(Number::from_float(4.5, true)));
} }
#[test] #[test]
@ -149,7 +164,7 @@ mod tests {
} }
fn check_tokens(input: &str, expected: Vec<Token>) { fn check_tokens(input: &str, expected: Vec<Token>) {
let lexer = Lexer::new(input); let lexer = lex(input);
let mut expected_iter = expected.iter(); let mut expected_iter = expected.iter();
for lex in lexer { for lex in lexer {
if let Some(expected_token) = expected_iter.next() { if let Some(expected_token) = expected_iter.next() {