Browse Source

all number types tested (#24)

pull/26/head
Jason Williams 5 years ago committed by GitHub
parent
commit
811ffe5d7d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 25
      src/lib/syntax/lexer.rs

25
src/lib/syntax/lexer.rs

@ -336,6 +336,17 @@ impl<'a> Lexer<'a> {
}
}
u64::from_str_radix(&buf, 16).unwrap()
} else if self.next_is('b')? {
loop {
let ch = self.preview_next()?;
match ch {
ch if ch.is_digit(2) => {
buf.push(self.next()?);
}
_ => break,
}
}
u64::from_str_radix(&buf, 2).unwrap()
} else {
let mut gone_decimal = false;
loop {
@ -345,6 +356,9 @@ impl<'a> Lexer<'a> {
buf.push(ch);
self.next()?;
}
'O' | 'o' => {
self.next()?;
}
'8' | '9' | '.' => {
gone_decimal = true;
buf.push(ch);
@ -374,7 +388,7 @@ impl<'a> Lexer<'a> {
Err(_) => break,
};
match ch {
'.' => {
'.' | 'e' | '+' | '-' => {
buf.push(self.next()?);
}
_ if ch.is_digit(10) => {
@ -579,16 +593,21 @@ mod tests {
);
}
// TODO: Missing support for 5e3 5e+3 5e-3 0b10 0O123 0999 (octal notation)
#[test]
fn numbers() {
let mut lexer = Lexer::new("1 2 0x34 056 7.89;");
let mut lexer = Lexer::new("1 2 0x34 056 7.89 5e3 5e+3 5e-3 0b10 0O123 0999;");
lexer.lex().expect("finished");
assert_eq!(lexer.tokens[0].data, TokenData::NumericLiteral(1.0));
assert_eq!(lexer.tokens[1].data, TokenData::NumericLiteral(2.0));
assert_eq!(lexer.tokens[2].data, TokenData::NumericLiteral(52.0));
assert_eq!(lexer.tokens[3].data, TokenData::NumericLiteral(46.0));
assert_eq!(lexer.tokens[4].data, TokenData::NumericLiteral(7.89));
assert_eq!(lexer.tokens[5].data, TokenData::NumericLiteral(5000.0));
assert_eq!(lexer.tokens[6].data, TokenData::NumericLiteral(5000.0));
assert_eq!(lexer.tokens[7].data, TokenData::NumericLiteral(0.005));
assert_eq!(lexer.tokens[8].data, TokenData::NumericLiteral(2.0));
assert_eq!(lexer.tokens[9].data, TokenData::NumericLiteral(83.0));
assert_eq!(lexer.tokens[10].data, TokenData::NumericLiteral(999.0));
}
#[test]

Loading…
Cancel
Save