From 0c297fe718bfc559eb7a121f59874683bf2c9b63 Mon Sep 17 00:00:00 2001 From: SimonSchneider Date: Tue, 7 Mar 2023 08:11:05 +0100 Subject: [PATCH] fix: encode float::Inf as null in json --- src/io/json/write/serialize.rs | 4 +++- tests/it/io/json/write.rs | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/io/json/write/serialize.rs b/src/io/json/write/serialize.rs index ea868435b9..acbb0ce71b 100644 --- a/src/io/json/write/serialize.rs +++ b/src/io/json/write/serialize.rs @@ -56,7 +56,9 @@ where array.iter(), |x, buf| { if let Some(x) = x { - if T::is_nan(*x) { + if T::is_infinite(*x) { + buf.extend(b"null") + } else if T::is_nan(*x) { buf.extend(b"null") } else { lexical_to_bytes_mut(*x, buf) diff --git a/tests/it/io/json/write.rs b/tests/it/io/json/write.rs index 895f0f5973..fc759244a5 100644 --- a/tests/it/io/json/write.rs +++ b/tests/it/io/json/write.rs @@ -28,18 +28,18 @@ fn int32() -> Result<()> { #[test] fn f32() -> Result<()> { - let array = Float32Array::from([Some(1.5), Some(2.5), Some(f32::NAN), None, Some(5.5)]); + let array = Float32Array::from([Some(1.5), Some(2.5), Some(f32::NAN), Some(f32::INFINITY), Some(f32::NEG_INFINITY), None, Some(5.5)]); - let expected = r#"[1.5,2.5,null,null,5.5]"#; + let expected = r#"[1.5,2.5,null,null,null,null,5.5]"#; test!(array, expected) } #[test] fn f64() -> Result<()> { - let array = Float64Array::from([Some(1.5), Some(2.5), Some(f64::NAN), None, Some(5.5)]); + let array = Float64Array::from([Some(1.5), Some(2.5), Some(f64::NAN), Some(f64::INFINITY), Some(f64::NEG_INFINITY), None, Some(5.5)]); - let expected = r#"[1.5,2.5,null,null,5.5]"#; + let expected = r#"[1.5,2.5,null,null,null,null,5.5]"#; test!(array, expected) }