This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/main by this push:
new a65a984b6d test: add tests for converting sliced list to row based
(#7994)
a65a984b6d is described below
commit a65a984b6db899c7bb2e909ba801773c05d07acb
Author: Raz Luvaton <[email protected]>
AuthorDate: Sun Jul 27 13:18:46 2025 +0300
test: add tests for converting sliced list to row based (#7994)
# Which issue does this PR close?
Before I fix the issue below I wanna add tests:
- #7993
# Rationale for this change
When started fixing #7993 and I wanted to know if there were any tests
that will protect me so I only changed:
https://github.com/apache/arrow-rs/blob/16794ab14fa62ecf67de0da9460cc5752a9358f4/arrow-row/src/lib.rs#L520-L526
to:
```rust
let values = match array.data_type() {
DataType::List(_) => {
let list_array = as_list_array(array);
let first_offset = list_array.offsets()[0] as usize;
let last_offset = list_array.offsets()[list_array.offsets().len() -
1] as usize;
list_array.values().slice(first_offset, last_offset - first_offset)
},
DataType::LargeList(_) => {
let list_array = as_large_list_array(array);
let first_offset = list_array.offsets()[0] as usize;
let last_offset = list_array.offsets()[list_array.offsets().len() -
1] as usize;
list_array.values().slice(first_offset, last_offset - first_offset)
},
DataType::FixedSizeList(_, _) =>
as_fixed_size_list_array(array).values().clone(),
_ => unreachable!(),
};
let rows = converter.convert_columns(&[values])?;
```
and no test failed
# What changes are included in this PR?
just added tests
# Are these changes tested?
-
# Are there any user-facing changes?
No
---------
Co-authored-by: Andrew Lamb <[email protected]>
---
arrow-row/src/lib.rs | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 51 insertions(+), 1 deletion(-)
diff --git a/arrow-row/src/lib.rs b/arrow-row/src/lib.rs
index 325d2953c8..96e9267605 100644
--- a/arrow-row/src/lib.rs
+++ b/arrow-row/src/lib.rs
@@ -2357,6 +2357,22 @@ mod tests {
assert_eq!(back.len(), 1);
back[0].to_data().validate_full().unwrap();
assert_eq!(&back[0], &list);
+
+ let sliced_list = list.slice(1, 5);
+ let rows_on_sliced_list = converter
+ .convert_columns(&[Arc::clone(&sliced_list)])
+ .unwrap();
+
+ assert!(rows_on_sliced_list.row(1) > rows_on_sliced_list.row(0)); //
[32, 52] > [32, 52, 12]
+ assert!(rows_on_sliced_list.row(2) < rows_on_sliced_list.row(1)); //
null < [32, 52]
+ assert!(rows_on_sliced_list.row(3) < rows_on_sliced_list.row(1)); //
[32, null] < [32, 52]
+ assert!(rows_on_sliced_list.row(4) > rows_on_sliced_list.row(1)); //
[] > [32, 52]
+ assert!(rows_on_sliced_list.row(2) < rows_on_sliced_list.row(4)); //
null < []
+
+ let back = converter.convert_rows(&rows_on_sliced_list).unwrap();
+ assert_eq!(back.len(), 1);
+ back[0].to_data().validate_full().unwrap();
+ assert_eq!(&back[0], &sliced_list);
}
fn test_nested_list<O: OffsetSizeTrait>() {
@@ -2448,6 +2464,19 @@ mod tests {
assert_eq!(back.len(), 1);
back[0].to_data().validate_full().unwrap();
assert_eq!(&back[0], &list);
+
+ let sliced_list = list.slice(1, 3);
+ let rows = converter
+ .convert_columns(&[Arc::clone(&sliced_list)])
+ .unwrap();
+
+ assert!(rows.row(0) < rows.row(1));
+ assert!(rows.row(1) < rows.row(2));
+
+ let back = converter.convert_rows(&rows).unwrap();
+ assert_eq!(back.len(), 1);
+ back[0].to_data().validate_full().unwrap();
+ assert_eq!(&back[0], &sliced_list);
}
#[test]
@@ -2568,6 +2597,21 @@ mod tests {
assert_eq!(back.len(), 1);
back[0].to_data().validate_full().unwrap();
assert_eq!(&back[0], &list);
+
+ let sliced_list = list.slice(1, 5);
+ let rows_on_sliced_list = converter
+ .convert_columns(&[Arc::clone(&sliced_list)])
+ .unwrap();
+
+ assert!(rows_on_sliced_list.row(2) < rows_on_sliced_list.row(1)); //
null < [32, 52, null]
+ assert!(rows_on_sliced_list.row(3) < rows_on_sliced_list.row(1)); //
[32, null, null] < [32, 52, null]
+ assert!(rows_on_sliced_list.row(4) < rows_on_sliced_list.row(1)); //
[null, null, null] > [32, 52, null]
+ assert!(rows_on_sliced_list.row(2) < rows_on_sliced_list.row(4)); //
null < [null, null, null]
+
+ let back = converter.convert_rows(&rows_on_sliced_list).unwrap();
+ assert_eq!(back.len(), 1);
+ back[0].to_data().validate_full().unwrap();
+ assert_eq!(&back[0], &sliced_list);
}
#[test]
@@ -2907,7 +2951,7 @@ mod tests {
fn generate_column(len: usize) -> ArrayRef {
let mut rng = rng();
- match rng.random_range(0..17) {
+ match rng.random_range(0..18) {
0 => Arc::new(generate_primitive_array::<Int32Type>(len, 0.8)),
1 => Arc::new(generate_primitive_array::<UInt32Type>(len, 0.8)),
2 => Arc::new(generate_primitive_array::<Int64Type>(len, 0.8)),
@@ -2944,6 +2988,12 @@ mod tests {
14 => Arc::new(generate_string_view(len, 0.8)),
15 => Arc::new(generate_byte_view(len, 0.8)),
16 => Arc::new(generate_fixed_stringview_column(len)),
+ 17 => Arc::new(
+ generate_list(len + 1000, 0.8, |values_len| {
+ Arc::new(generate_primitive_array::<Int64Type>(values_len,
0.8))
+ })
+ .slice(500, len),
+ ),
_ => unreachable!(),
}
}