Make ".e0" not parse as 0.0
This forces floats to have either a digit before the separating point, or after. Thus ".e0" is invalid like ".", when using `parse()`.
This commit is contained in:
parent
90759befe0
commit
c0e87f13a4
2 changed files with 8 additions and 1 deletions
|
@ -73,7 +73,8 @@ pub fn parse_decimal(s: &str) -> ParseResult {
|
||||||
}
|
}
|
||||||
Some(&b'.') => {
|
Some(&b'.') => {
|
||||||
let (fractional, s) = eat_digits(&s[1..]);
|
let (fractional, s) = eat_digits(&s[1..]);
|
||||||
if integral.is_empty() && fractional.is_empty() && s.is_empty() {
|
if integral.is_empty() && fractional.is_empty() {
|
||||||
|
// We require at least a single digit before or after the point.
|
||||||
return Invalid;
|
return Invalid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -101,6 +101,12 @@ fn lonely_dot() {
|
||||||
assert!(".".parse::<f64>().is_err());
|
assert!(".".parse::<f64>().is_err());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn exponentiated_dot() {
|
||||||
|
assert!(".e0".parse::<f32>().is_err());
|
||||||
|
assert!(".e0".parse::<f64>().is_err());
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn lonely_sign() {
|
fn lonely_sign() {
|
||||||
assert!("+".parse::<f32>().is_err());
|
assert!("+".parse::<f32>().is_err());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue