diff --git a/tests/it/array/primitive/mod.rs b/tests/it/array/primitive/mod.rs index 0dc9cab6ffc..594ab54774b 100644 --- a/tests/it/array/primitive/mod.rs +++ b/tests/it/array/primitive/mod.rs @@ -3,6 +3,7 @@ use std::iter::FromIterator; use arrow2::{ array::*, bitmap::Bitmap, + buffer::Buffer, datatypes::*, types::{days_ms, months_days_ns}, }; @@ -256,3 +257,10 @@ fn months_days_ns() { let a = array.values().as_slice(); assert_eq!(a, data.as_ref()); } + +#[test] +#[should_panic] +fn wrong_data_type() { + let values = Buffer::from(b"abbb"); + PrimitiveArray::from_data(DataType::Utf8, values, None); +} diff --git a/tests/it/array/primitive/mutable.rs b/tests/it/array/primitive/mutable.rs index 6fcda45b07a..f5f4cd381d7 100644 --- a/tests/it/array/primitive/mutable.rs +++ b/tests/it/array/primitive/mutable.rs @@ -148,3 +148,10 @@ fn try_from_trusted_len_iter() { let a = MutablePrimitiveArray::try_from_trusted_len_iter(iter).unwrap(); assert_eq!(a, MutablePrimitiveArray::from([Some(1), Some(1)])); } + +#[test] +#[should_panic] +fn wrong_data_type() { + let values = MutableBuffer::from(b"abbb"); + MutablePrimitiveArray::from_data(DataType::Utf8, values, None); +} diff --git a/tests/it/array/utf8/mod.rs b/tests/it/array/utf8/mod.rs index 49c993d5751..3d664a47a71 100644 --- a/tests/it/array/utf8/mod.rs +++ b/tests/it/array/utf8/mod.rs @@ -107,3 +107,27 @@ fn try_from_trusted_len_iter() { Utf8Array::::from_data(DataType::Utf8, offsets, values, None) ); } + +#[test] +#[should_panic] +fn not_utf8() { + let offsets = Buffer::from(&[0, 4]); + let values = Buffer::from([0, 159, 146, 150]); // invalid utf8 + Utf8Array::::from_data(DataType::Utf8, offsets, values, None); +} + +#[test] +#[should_panic] +fn wrong_offsets() { + let offsets = Buffer::from(&[0, 5, 4]); // invalid offsets + let values = Buffer::from(b"abbbbb"); + Utf8Array::::from_data(DataType::Utf8, offsets, values, None); +} + +#[test] +#[should_panic] +fn wrong_data_type() { + let offsets = Buffer::from(&[0, 4]); // invalid offsets + let values = Buffer::from(b"abbb"); + Utf8Array::::from_data(DataType::Int8, offsets, values, None); +} diff --git a/tests/it/array/utf8/mutable.rs b/tests/it/array/utf8/mutable.rs index 1aedcf16d33..c7ee553ee5e 100644 --- a/tests/it/array/utf8/mutable.rs +++ b/tests/it/array/utf8/mutable.rs @@ -1,5 +1,7 @@ use arrow2::array::{Array, MutableUtf8Array, Utf8Array}; use arrow2::bitmap::Bitmap; +use arrow2::buffer::MutableBuffer; +use arrow2::datatypes::DataType; #[test] fn capacities() { @@ -17,3 +19,29 @@ fn push_null() { let array: Utf8Array = array.into(); assert_eq!(array.validity(), &Some(Bitmap::from([false]))); } + +/// Safety guarantee +#[test] +#[should_panic] +fn not_utf8() { + let offsets = MutableBuffer::from(&[0, 4]); + let values = MutableBuffer::from([0, 159, 146, 150]); // invalid utf8 + MutableUtf8Array::::from_data(DataType::Utf8, offsets, values, None); +} + +/// Safety guarantee +#[test] +#[should_panic] +fn wrong_offsets() { + let offsets = MutableBuffer::from(&[0, 5, 4]); // invalid offsets + let values = MutableBuffer::from(b"abbbbb"); + MutableUtf8Array::::from_data(DataType::Utf8, offsets, values, None); +} + +#[test] +#[should_panic] +fn wrong_data_type() { + let offsets = MutableBuffer::from(&[0, 4]); // invalid offsets + let values = MutableBuffer::from(b"abbb"); + MutableUtf8Array::::from_data(DataType::Int8, offsets, values, None); +}