@@ -59,7 +59,12 @@ pub fn parse_decimal(s: &str) -> ParseResult {
|
|||||||
let s = s.as_bytes();
|
let s = s.as_bytes();
|
||||||
let (integral, s) = eat_digits(s);
|
let (integral, s) = eat_digits(s);
|
||||||
match s.first() {
|
match s.first() {
|
||||||
None => Valid(Decimal::new(integral, b"", 0)),
|
None => {
|
||||||
|
if integral.is_empty() {
|
||||||
|
return Invalid; // No digits at all
|
||||||
|
}
|
||||||
|
Valid(Decimal::new(integral, b"", 0))
|
||||||
|
}
|
||||||
Some(&b'e') | Some(&b'E') => {
|
Some(&b'e') | Some(&b'E') => {
|
||||||
if integral.is_empty() {
|
if integral.is_empty() {
|
||||||
return Invalid; // No digits before 'e'
|
return Invalid; // No digits before 'e'
|
||||||
|
|||||||
@@ -101,6 +101,18 @@ fn lonely_dot() {
|
|||||||
assert_eq!(".".parse(), Ok(0.0));
|
assert_eq!(".".parse(), Ok(0.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn lonely_sign() {
|
||||||
|
assert!("+".parse::<f32>().is_err());
|
||||||
|
assert!("-".parse::<f64>().is_err());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn whitespace() {
|
||||||
|
assert!(" 1.0".parse::<f32>().is_err());
|
||||||
|
assert!("1.0 ".parse::<f64>().is_err());
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn nan() {
|
fn nan() {
|
||||||
assert!("NaN".parse::<f32>().unwrap().is_nan());
|
assert!("NaN".parse::<f32>().unwrap().is_nan());
|
||||||
|
|||||||
Reference in New Issue
Block a user