Skip to content

Commit 2f852b3

Browse files
authored
minor: add decimal roundtrip tests for the row format (#6165)
* minor: add decimal roundtrip tests for the row format * more precise buffer size * fmt
1 parent d9d0a47 commit 2f852b3

File tree

1 file changed

+55
-2
lines changed

1 file changed

+55
-2
lines changed

datafusion/row/src/lib.rs

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ fn get_columns(mut arrays: Vec<Box<dyn ArrayBuilder>>) -> Vec<ArrayRef> {
9999
#[cfg(test)]
100100
mod tests {
101101
use super::*;
102+
use crate::layout::RowLayout;
102103
use crate::reader::read_as_batch;
103104
use crate::writer::write_batch_unchecked;
104105
use arrow::record_batch::RecordBatch;
@@ -113,9 +114,10 @@ mod tests {
113114
#[allow(non_snake_case)]
114115
fn [<test _single_ $TYPE>]() -> Result<()> {
115116
let schema = Arc::new(Schema::new(vec![Field::new("a", $TYPE, true)]));
117+
let record_width = RowLayout::new(schema.as_ref()).fixed_part_width();
116118
let a = $ARRAY::from($VEC);
117119
let batch = RecordBatch::try_new(schema.clone(), vec![Arc::new(a)])?;
118-
let mut vector = vec![0; 1024];
120+
let mut vector = vec![0; record_width * batch.num_rows()];
119121
let row_offsets =
120122
{ write_batch_unchecked(&mut vector, 0, &batch, 0, schema.clone()) };
121123
let output_batch = { read_as_batch(&vector, schema, &row_offsets)? };
@@ -127,10 +129,11 @@ mod tests {
127129
#[allow(non_snake_case)]
128130
fn [<test_single_ $TYPE _null_free>]() -> Result<()> {
129131
let schema = Arc::new(Schema::new(vec![Field::new("a", $TYPE, false)]));
132+
let record_width = RowLayout::new(schema.as_ref()).fixed_part_width();
130133
let v = $VEC.into_iter().filter(|o| o.is_some()).collect::<Vec<_>>();
131134
let a = $ARRAY::from(v);
132135
let batch = RecordBatch::try_new(schema.clone(), vec![Arc::new(a)])?;
133-
let mut vector = vec![0; 1024];
136+
let mut vector = vec![0; record_width * batch.num_rows()];
134137
let row_offsets =
135138
{ write_batch_unchecked(&mut vector, 0, &batch, 0, schema.clone()) };
136139
let output_batch = { read_as_batch(&vector, schema, &row_offsets)? };
@@ -219,6 +222,56 @@ mod tests {
219222
vec![Some(5), Some(7), None, Some(0), Some(111)]
220223
);
221224

225+
#[test]
226+
fn test_single_decimal128() -> Result<()> {
227+
let v = vec![
228+
Some(0),
229+
Some(1),
230+
None,
231+
Some(-1),
232+
Some(i128::MIN),
233+
Some(i128::MAX),
234+
];
235+
let schema =
236+
Arc::new(Schema::new(vec![Field::new("a", Decimal128(38, 10), true)]));
237+
let record_width = RowLayout::new(schema.as_ref()).fixed_part_width();
238+
let a = Decimal128Array::from(v);
239+
let batch = RecordBatch::try_new(schema.clone(), vec![Arc::new(a)])?;
240+
let mut vector = vec![0; record_width * batch.num_rows()];
241+
let row_offsets =
242+
{ write_batch_unchecked(&mut vector, 0, &batch, 0, schema.clone()) };
243+
let output_batch = { read_as_batch(&vector, schema, &row_offsets)? };
244+
assert_eq!(batch, output_batch);
245+
Ok(())
246+
}
247+
248+
#[test]
249+
fn test_single_decimal128_null_free() -> Result<()> {
250+
let v = vec![
251+
Some(0),
252+
Some(1),
253+
None,
254+
Some(-1),
255+
Some(i128::MIN),
256+
Some(i128::MAX),
257+
];
258+
let schema = Arc::new(Schema::new(vec![Field::new(
259+
"a",
260+
Decimal128(38, 10),
261+
false,
262+
)]));
263+
let record_width = RowLayout::new(schema.as_ref()).fixed_part_width();
264+
let v = v.into_iter().filter(|o| o.is_some()).collect::<Vec<_>>();
265+
let a = Decimal128Array::from(v);
266+
let batch = RecordBatch::try_new(schema.clone(), vec![Arc::new(a)])?;
267+
let mut vector = vec![0; record_width * batch.num_rows()];
268+
let row_offsets =
269+
{ write_batch_unchecked(&mut vector, 0, &batch, 0, schema.clone()) };
270+
let output_batch = { read_as_batch(&vector, schema, &row_offsets)? };
271+
assert_eq!(batch, output_batch);
272+
Ok(())
273+
}
274+
222275
#[test]
223276
#[should_panic(expected = "not supported yet")]
224277
fn test_unsupported_type() {

0 commit comments

Comments
 (0)