This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/master by this push:
new 9d637a4 bugfix in display of float16 array (#1194)
9d637a4 is described below
commit 9d637a4f9e855bcbe1950f6ade694ab124d9fa9a
Author: Helgi Kristvin Sigurbjarnarson <[email protected]>
AuthorDate: Tue Jan 18 13:59:27 2022 -0800
bugfix in display of float16 array (#1194)
Due to a typo the float16 array was being cast to a float32 array,
causing a crash when pretty printing a record batch containing float16.
---
arrow/src/util/display.rs | 2 +-
arrow/src/util/pretty.rs | 36 ++++++++++++++++++++++++++++++++++--
2 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/arrow/src/util/display.rs b/arrow/src/util/display.rs
index 91f64db..743f7f4 100644
--- a/arrow/src/util/display.rs
+++ b/arrow/src/util/display.rs
@@ -313,7 +313,7 @@ pub fn array_value_to_string(column: &array::ArrayRef, row:
usize) -> Result<Str
DataType::UInt16 => make_string!(array::UInt16Array, column, row),
DataType::UInt32 => make_string!(array::UInt32Array, column, row),
DataType::UInt64 => make_string!(array::UInt64Array, column, row),
- DataType::Float16 => make_string!(array::Float32Array, column, row),
+ DataType::Float16 => make_string!(array::Float16Array, column, row),
DataType::Float32 => make_string!(array::Float32Array, column, row),
DataType::Float64 => make_string!(array::Float64Array, column, row),
DataType::Decimal(..) => make_string_from_decimal(column, row),
diff --git a/arrow/src/util/pretty.rs b/arrow/src/util/pretty.rs
index 44fe050..91343ec 100644
--- a/arrow/src/util/pretty.rs
+++ b/arrow/src/util/pretty.rs
@@ -109,8 +109,8 @@ mod tests {
use crate::{
array::{
self, new_null_array, Array, Date32Array, Date64Array,
- FixedSizeBinaryBuilder, PrimitiveBuilder, StringArray,
StringBuilder,
- StringDictionaryBuilder, StructArray, Time32MillisecondArray,
+ FixedSizeBinaryBuilder, Float16Array, PrimitiveBuilder,
StringArray,
+ StringBuilder, StringDictionaryBuilder, StructArray,
Time32MillisecondArray,
Time32SecondArray, Time64MicrosecondArray, Time64NanosecondArray,
TimestampMicrosecondArray, TimestampMillisecondArray,
TimestampNanosecondArray, TimestampSecondArray,
@@ -123,6 +123,8 @@ mod tests {
use std::fmt::Write;
use std::sync::Arc;
+ use half::f16;
+
#[test]
fn test_pretty_format_batches() -> Result<()> {
// define a schema.
@@ -692,4 +694,34 @@ mod tests {
Ok(())
}
+
+ #[test]
+ fn test_float16_display() -> Result<()> {
+ let values = vec![
+ Some(f16::from_f32(f32::NAN)),
+ Some(f16::from_f32(4.0)),
+ Some(f16::from_f32(f32::NEG_INFINITY)),
+ ];
+ let array = Arc::new(values.into_iter().collect::<Float16Array>()) as
ArrayRef;
+
+ let schema = Arc::new(Schema::new(vec![Field::new(
+ "f16",
+ array.data_type().clone(),
+ true,
+ )]));
+
+ let batch = RecordBatch::try_new(schema, vec![array])?;
+
+ let table = pretty_format_batches(&[batch])?.to_string();
+
+ let expected = vec![
+ "+------+", "| f16 |", "+------+", "| NaN |", "| 4 |", "|
-inf |",
+ "+------+",
+ ];
+
+ let actual: Vec<&str> = table.lines().collect();
+ assert_eq!(expected, actual, "Actual result:\n{}", table);
+
+ Ok(())
+ }
}