Skip to content

Commit

Permalink
Add full data validation for ArrayData::try_new() (#921)
Browse files Browse the repository at this point in the history
* Add full data validation for ArrayData::try_new()

* Only look at offset+len indexes

Co-authored-by: Jörn Horstmann <git@jhorstmann.net>

* fix test

* fmt

* test for array indexes

Co-authored-by: Jörn Horstmann <git@jhorstmann.net>
  • Loading branch information
alamb and jhorstmann committed Dec 5, 2021
1 parent b4507f5 commit 14660d2
Show file tree
Hide file tree
Showing 4 changed files with 687 additions and 18 deletions.
30 changes: 30 additions & 0 deletions arrow/src/array/array_binary.rs
Expand Up @@ -1375,4 +1375,34 @@ mod tests {
assert_eq!(2, arr.value_length());
assert_eq!(5, arr.len())
}

#[test]
fn test_binary_array_all_null() {
let data = vec![None];
let array = BinaryArray::from(data);
array
.data()
.validate_full()
.expect("All null array has valid array data");
}

#[test]
fn test_large_binary_array_all_null() {
let data = vec![None];
let array = LargeBinaryArray::from(data);
array
.data()
.validate_full()
.expect("All null array has valid array data");
}

#[test]
fn fixed_size_binary_array_all_null() {
let data = vec![None] as Vec<Option<String>>;
let array = FixedSizeBinaryArray::try_from_sparse_iter(data.into_iter()).unwrap();
array
.data()
.validate_full()
.expect("All null array has valid array data");
}
}
10 changes: 10 additions & 0 deletions arrow/src/array/array_dictionary.rs
Expand Up @@ -412,4 +412,14 @@ mod tests {
assert_eq!(1, keys.value(2));
assert_eq!(0, keys.value(5));
}

#[test]
fn test_dictionary_all_nulls() {
let test = vec![None, None, None];
let array: DictionaryArray<Int32Type> = test.into_iter().collect();
array
.data()
.validate_full()
.expect("All null array has valid array data");
}
}
21 changes: 15 additions & 6 deletions arrow/src/array/array_string.rs
Expand Up @@ -554,13 +554,22 @@ mod tests {
}

#[test]
fn test_string_array_from_string_vec() {
let data = vec!["Foo".to_owned(), "Bar".to_owned(), "Baz".to_owned()];
fn test_string_array_all_null() {
let data = vec![None];
let array = StringArray::from(data);
array
.data()
.validate_full()
.expect("All null array has valid array data");
}

assert_eq!(array.len(), 3);
assert_eq!(array.value(0), "Foo");
assert_eq!(array.value(1), "Bar");
assert_eq!(array.value(2), "Baz");
#[test]
fn test_large_string_array_all_null() {
let data = vec![None];
let array = LargeStringArray::from(data);
array
.data()
.validate_full()
.expect("All null array has valid array data");
}
}

0 comments on commit 14660d2

Please sign in to comment.