Fix adjacently tagged f32 roundtrip regression

This commit is contained in:
David Tolnay 2019-02-28 00:57:55 -08:00
parent 6ac689b2b3
commit d79c8e5f1e
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82
5 changed files with 27 additions and 1 deletions

View File

@ -22,6 +22,7 @@ itoa = "0.4.3"
ryu = "0.2"
[dev-dependencies]
automod = "0.1"
compiletest_rs = { version = "0.3", features = ["stable"] }
serde_bytes = "0.10"
serde_derive = "1.0"

View File

@ -473,7 +473,7 @@ macro_rules! deserialize_any {
} else if let Some(i) = self.as_i64() {
return visitor.visit_i64(i);
} else if let Some(f) = self.as_f64() {
if f.to_string() == self.n {
if ryu::Buffer::new().format(f) == self.n || f.to_string() == self.n {
return visitor.visit_f64(f);
}
}

6
tests/regression.rs Normal file
View File

@ -0,0 +1,6 @@
extern crate automod;
extern crate serde;
extern crate serde_derive;
#[path = "regression/mod.rs"]
mod regression;

View File

@ -0,0 +1,18 @@
use serde_derive::{Serialize, Deserialize};
#[derive(Serialize, Deserialize, Debug)]
#[serde(tag = "type", content = "data")]
enum E {
Float(f32),
}
#[test]
fn test() {
let e = E::Float(159.1);
let v = serde_json::to_value(e).unwrap();
let e = serde_json::from_value::<E>(v).unwrap();
match e {
E::Float(f) => assert_eq!(f, 159.1),
}
}

1
tests/regression/mod.rs Normal file
View File

@ -0,0 +1 @@
automod::dir!("tests/regression");