From 848b8119a301adfa837bf7442241dab540a3b6e0 Mon Sep 17 00:00:00 2001 From: Windel Bouwman Date: Tue, 31 Dec 2019 16:08:25 +0100 Subject: [PATCH 1/3] Add roundtrip example test case. --- tests/roundtrip.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 tests/roundtrip.rs diff --git a/tests/roundtrip.rs b/tests/roundtrip.rs new file mode 100644 index 00000000..d78fa180 --- /dev/null +++ b/tests/roundtrip.rs @@ -0,0 +1,32 @@ +#[macro_use] +extern crate serde_derive; + +use serde_cbor; +use serde_cbor::de; + +#[derive(Serialize, Deserialize, Debug, PartialEq)] +struct MyStuff { + #[serde(flatten)] + data: MyStuffType, +} + +#[derive(Serialize, Deserialize, Debug, PartialEq)] +enum MyStuffType { + ver1 { + x: f64, + }, + ver2 +} + +#[test] +/// Test roundtrip operation on a serde data structure. +fn test_roundtrip() { + let stuff1 = MyStuff { + data: MyStuffType::ver1 { + x: 2.5 + } + }; + let data_bytes = serde_cbor::to_vec(&stuff1).unwrap(); + let stuff2 = serde_cbor::from_slice(&data_bytes).unwrap(); + assert_eq!(stuff1, stuff2); +} From 5f3fa0898b66cc68b38e6dbc621f47486bd3d817 Mon Sep 17 00:00:00 2001 From: Windel Bouwman Date: Mon, 6 Jan 2020 21:20:27 +0100 Subject: [PATCH 2/3] Fix roundtrip of f64 field. --- src/de.rs | 4 ++-- tests/roundtrip.rs | 11 +++-------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/de.rs b/src/de.rs index 9e259b52..4bcd5033 100644 --- a/src/de.rs +++ b/src/de.rs @@ -732,11 +732,11 @@ where 0xf8 => Err(self.error(ErrorCode::UnassignedCode)), 0xf9 => { let value = self.parse_f16()?; - visitor.visit_f32(value) + visitor.visit_f64(value as f64) } 0xfa => { let value = self.parse_f32()?; - visitor.visit_f32(value) + visitor.visit_f64(value as f64) } 0xfb => { let value = self.parse_f64()?; diff --git a/tests/roundtrip.rs b/tests/roundtrip.rs index d78fa180..956f85a7 100644 --- a/tests/roundtrip.rs +++ b/tests/roundtrip.rs @@ -2,7 +2,6 @@ extern crate serde_derive; use serde_cbor; -use serde_cbor::de; #[derive(Serialize, Deserialize, Debug, PartialEq)] struct MyStuff { @@ -12,19 +11,15 @@ struct MyStuff { #[derive(Serialize, Deserialize, Debug, PartialEq)] enum MyStuffType { - ver1 { - x: f64, - }, - ver2 + Ver1 { x: f64, y: f32 }, + Ver2, } #[test] /// Test roundtrip operation on a serde data structure. fn test_roundtrip() { let stuff1 = MyStuff { - data: MyStuffType::ver1 { - x: 2.5 - } + data: MyStuffType::Ver1 { x: 2.5, y: 2.5 }, }; let data_bytes = serde_cbor::to_vec(&stuff1).unwrap(); let stuff2 = serde_cbor::from_slice(&data_bytes).unwrap(); From fbed55314550a20f73aed04e2e319ccbbc6ef382 Mon Sep 17 00:00:00 2001 From: Windel Bouwman Date: Mon, 6 Jan 2020 21:59:54 +0100 Subject: [PATCH 3/3] Only perform test in cfg std. --- tests/roundtrip.rs | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/tests/roundtrip.rs b/tests/roundtrip.rs index 956f85a7..91bf441b 100644 --- a/tests/roundtrip.rs +++ b/tests/roundtrip.rs @@ -1,27 +1,31 @@ #[macro_use] extern crate serde_derive; -use serde_cbor; +#[cfg(feature = "std")] +mod roundtrip { -#[derive(Serialize, Deserialize, Debug, PartialEq)] -struct MyStuff { - #[serde(flatten)] - data: MyStuffType, -} + use serde_cbor; -#[derive(Serialize, Deserialize, Debug, PartialEq)] -enum MyStuffType { - Ver1 { x: f64, y: f32 }, - Ver2, -} + #[derive(Serialize, Deserialize, Debug, PartialEq)] + struct MyStuff { + #[serde(flatten)] + data: MyStuffType, + } + + #[derive(Serialize, Deserialize, Debug, PartialEq)] + enum MyStuffType { + Ver1 { x: f64, y: f32 }, + Ver2, + } -#[test] -/// Test roundtrip operation on a serde data structure. -fn test_roundtrip() { - let stuff1 = MyStuff { - data: MyStuffType::Ver1 { x: 2.5, y: 2.5 }, - }; - let data_bytes = serde_cbor::to_vec(&stuff1).unwrap(); - let stuff2 = serde_cbor::from_slice(&data_bytes).unwrap(); - assert_eq!(stuff1, stuff2); + #[test] + /// Test roundtrip operation on a serde data structure. + fn test_roundtrip() { + let stuff1 = MyStuff { + data: MyStuffType::Ver1 { x: 2.5, y: 2.5 }, + }; + let data_bytes = serde_cbor::to_vec(&stuff1).unwrap(); + let stuff2 = serde_cbor::from_slice(&data_bytes).unwrap(); + assert_eq!(stuff1, stuff2); + } }