Skip to content
This repository has been archived by the owner on Feb 18, 2024. It is now read-only.

Commit

Permalink
Fixed error in new_null (#1114)
Browse files Browse the repository at this point in the history
  • Loading branch information
jorgecarleitao committed Jun 28, 2022
1 parent b522364 commit e9d923a
Show file tree
Hide file tree
Showing 2 changed files with 111 additions and 4 deletions.
12 changes: 8 additions & 4 deletions src/array/fixed_size_list/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,11 @@ impl FixedSizeListArray {
Self::try_new(data_type, values, validity).unwrap()
}

/// Returns the size (number of elements per slot) of this [`FixedSizeListArray`].
pub const fn size(&self) -> usize {
self.size
}

/// Alias for `new`
pub fn from_data(
data_type: DataType,
Expand All @@ -101,10 +106,9 @@ impl FixedSizeListArray {

/// Returns a new null [`FixedSizeListArray`].
pub fn new_null(data_type: DataType, length: usize) -> Self {
let values = new_null_array(
Self::get_child_and_size(&data_type).0.data_type().clone(),
length,
);
let (field, size) = Self::get_child_and_size(&data_type);

let values = new_null_array(field.data_type().clone(), length * size);
Self::new(data_type, values, Some(Bitmap::new_zeroed(length)))
}

Expand Down
103 changes: 103 additions & 0 deletions tests/it/array/fixed_size_list/mod.rs
Original file line number Diff line number Diff line change
@@ -1 +1,104 @@
mod mutable;

use arrow2::{
array::*,
bitmap::Bitmap,
datatypes::{DataType, Field},
};

fn data() -> FixedSizeListArray {
let values = Int32Array::from_slice([10, 20, 0, 0]);

FixedSizeListArray::try_new(
DataType::FixedSizeList(
Box::new(Field::new("a", values.data_type().clone(), true)),
2,
),
values.boxed(),
Some([true, false].into()),
)
.unwrap()
}

#[test]
fn basics() {
let array = data();
assert_eq!(array.size(), 2);
assert_eq!(array.len(), 2);
assert_eq!(array.validity(), Some(&Bitmap::from([true, false])));

assert_eq!(array.value(0).as_ref(), Int32Array::from_slice([10, 20]));
assert_eq!(array.value(1).as_ref(), Int32Array::from_slice([0, 0]));

let array = array.slice(1, 1);

assert_eq!(array.value(0).as_ref(), Int32Array::from_slice([0, 0]));
}

#[test]
fn with_validity() {
let array = data();

let a = array.with_validity(None);
assert!(a.validity().is_none());
}

#[test]
fn debug() {
let array = data();

assert_eq!(format!("{:?}", array), "FixedSizeListArray[[10, 20], None]");
}

#[test]
fn empty() {
let array = FixedSizeListArray::new_empty(DataType::FixedSizeList(
Box::new(Field::new("a", DataType::Int32, true)),
2,
));
assert_eq!(array.values().len(), 0);
assert_eq!(array.validity(), None);
}

#[test]
fn null() {
let array = FixedSizeListArray::new_null(
DataType::FixedSizeList(Box::new(Field::new("a", DataType::Int32, true)), 2),
2,
);
assert_eq!(array.values().len(), 4);
assert_eq!(array.validity().cloned(), Some([false, false].into()));
}

#[test]
fn wrong_size() {
let values = Int32Array::from_slice([10, 20, 0]);
assert!(FixedSizeListArray::try_new(
DataType::FixedSizeList(Box::new(Field::new("a", DataType::Int32, true)), 2),
values.boxed(),
None
)
.is_err());
}

#[test]
fn wrong_len() {
let values = Int32Array::from_slice([10, 20, 0]);
assert!(FixedSizeListArray::try_new(
DataType::FixedSizeList(Box::new(Field::new("a", DataType::Int32, true)), 2),
values.boxed(),
Some([true, false, false].into()), // it should be 2
)
.is_err());
}

#[test]
fn wrong_data_type() {
let values = Int32Array::from_slice([10, 20, 0]);
assert!(FixedSizeListArray::try_new(
DataType::Binary,
values.boxed(),
Some([true, false, false].into()), // it should be 2
)
.is_err());
}

0 comments on commit e9d923a

Please sign in to comment.