From f822f4661bd608ccf7742bf7a164443463816938 Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Fri, 23 Aug 2019 09:55:15 -0700 Subject: [PATCH] Allow zero-prefixed float exponents. (#322) --- src/de.rs | 4 ++-- test-suite/tests/parser.rs | 1 - test-suite/tests/valid.rs | 6 ++++++ test-suite/tests/valid/float-exponent.json | 11 +++++++++++ test-suite/tests/valid/float-exponent.toml | 9 +++++++++ 5 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 test-suite/tests/valid/float-exponent.json create mode 100644 test-suite/tests/valid/float-exponent.toml diff --git a/src/de.rs b/src/de.rs index 4c3acc5..f9a3a4c 100644 --- a/src/de.rs +++ b/src/de.rs @@ -1436,11 +1436,11 @@ impl<'a> Deserializer<'a> { let (a, b) = if suffix.len() == 1 { self.eat(Token::Plus)?; match self.next()? { - Some((_, Token::Keylike(s))) => self.parse_integer(s, false, false, 10)?, + Some((_, Token::Keylike(s))) => self.parse_integer(s, false, true, 10)?, _ => return Err(self.error(start, ErrorKind::NumberInvalid)), } } else { - self.parse_integer(&suffix[1..], true, false, 10)? + self.parse_integer(&suffix[1..], true, true, 10)? }; if b != "" { return Err(self.error(start, ErrorKind::NumberInvalid)); diff --git a/test-suite/tests/parser.rs b/test-suite/tests/parser.rs index 012bd65..eab9f5a 100644 --- a/test-suite/tests/parser.rs +++ b/test-suite/tests/parser.rs @@ -270,7 +270,6 @@ fn bad_floats() { bad!("a = 0.0e", "invalid number at line 1 column 5"); bad!("a = 0.0e-", "invalid number at line 1 column 9"); bad!("a = 0.0e+", "invalid number at line 1 column 5"); - bad!("a = 0.0e+00", "invalid number at line 1 column 11"); } #[test] diff --git a/test-suite/tests/valid.rs b/test-suite/tests/valid.rs index 6914edd..e080958 100644 --- a/test-suite/tests/valid.rs +++ b/test-suite/tests/valid.rs @@ -368,3 +368,9 @@ test!( include_str!("valid/quote-surrounded-value.toml"), include_str!("valid/quote-surrounded-value.json") ); + +test!( + float_exponent, + include_str!("valid/float-exponent.toml"), + include_str!("valid/float-exponent.json") +); diff --git a/test-suite/tests/valid/float-exponent.json b/test-suite/tests/valid/float-exponent.json new file mode 100644 index 0000000..97709b4 --- /dev/null +++ b/test-suite/tests/valid/float-exponent.json @@ -0,0 +1,11 @@ +{ + "lower": {"type": "float", "value": "300.0"}, + "upper": {"type": "float", "value": "300.0"}, + "neg": {"type": "float", "value": "0.03"}, + "pos": {"type": "float", "value": "300.0"}, + "zero": {"type": "float", "value": "3.0"}, + "pointlower": {"type": "float", "value": "310.0"}, + "pointupper": {"type": "float", "value": "310.0"}, + "prefix-zero-exp": {"type": "float", "value": "1000000.0"}, + "prefix-zero-exp-plus": {"type": "float", "value": "1000000.0"} +} diff --git a/test-suite/tests/valid/float-exponent.toml b/test-suite/tests/valid/float-exponent.toml new file mode 100644 index 0000000..5349db3 --- /dev/null +++ b/test-suite/tests/valid/float-exponent.toml @@ -0,0 +1,9 @@ +lower = 3e2 +upper = 3E2 +neg = 3e-2 +pos = 3E+2 +zero = 3e0 +pointlower = 3.1e2 +pointupper = 3.1E2 +prefix-zero-exp = 1e06 +prefix-zero-exp-plus = 1e+06