Skip to content

Commit 9d637a4

Browse files
authored
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.
1 parent 0cc0c05 commit 9d637a4

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

arrow/src/util/display.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ pub fn array_value_to_string(column: &array::ArrayRef, row: usize) -> Result<Str
313313
DataType::UInt16 => make_string!(array::UInt16Array, column, row),
314314
DataType::UInt32 => make_string!(array::UInt32Array, column, row),
315315
DataType::UInt64 => make_string!(array::UInt64Array, column, row),
316-
DataType::Float16 => make_string!(array::Float32Array, column, row),
316+
DataType::Float16 => make_string!(array::Float16Array, column, row),
317317
DataType::Float32 => make_string!(array::Float32Array, column, row),
318318
DataType::Float64 => make_string!(array::Float64Array, column, row),
319319
DataType::Decimal(..) => make_string_from_decimal(column, row),

arrow/src/util/pretty.rs

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ mod tests {
109109
use crate::{
110110
array::{
111111
self, new_null_array, Array, Date32Array, Date64Array,
112-
FixedSizeBinaryBuilder, PrimitiveBuilder, StringArray, StringBuilder,
113-
StringDictionaryBuilder, StructArray, Time32MillisecondArray,
112+
FixedSizeBinaryBuilder, Float16Array, PrimitiveBuilder, StringArray,
113+
StringBuilder, StringDictionaryBuilder, StructArray, Time32MillisecondArray,
114114
Time32SecondArray, Time64MicrosecondArray, Time64NanosecondArray,
115115
TimestampMicrosecondArray, TimestampMillisecondArray,
116116
TimestampNanosecondArray, TimestampSecondArray,
@@ -123,6 +123,8 @@ mod tests {
123123
use std::fmt::Write;
124124
use std::sync::Arc;
125125

126+
use half::f16;
127+
126128
#[test]
127129
fn test_pretty_format_batches() -> Result<()> {
128130
// define a schema.
@@ -692,4 +694,34 @@ mod tests {
692694

693695
Ok(())
694696
}
697+
698+
#[test]
699+
fn test_float16_display() -> Result<()> {
700+
let values = vec![
701+
Some(f16::from_f32(f32::NAN)),
702+
Some(f16::from_f32(4.0)),
703+
Some(f16::from_f32(f32::NEG_INFINITY)),
704+
];
705+
let array = Arc::new(values.into_iter().collect::<Float16Array>()) as ArrayRef;
706+
707+
let schema = Arc::new(Schema::new(vec![Field::new(
708+
"f16",
709+
array.data_type().clone(),
710+
true,
711+
)]));
712+
713+
let batch = RecordBatch::try_new(schema, vec![array])?;
714+
715+
let table = pretty_format_batches(&[batch])?.to_string();
716+
717+
let expected = vec![
718+
"+------+", "| f16 |", "+------+", "| NaN |", "| 4 |", "| -inf |",
719+
"+------+",
720+
];
721+
722+
let actual: Vec<&str> = table.lines().collect();
723+
assert_eq!(expected, actual, "Actual result:\n{}", table);
724+
725+
Ok(())
726+
}
695727
}

0 commit comments

Comments
 (0)