Path: blob/main/crates/polars-arrow/src/array/binary/proptest.rs
6939 views
use proptest::prelude::{Strategy, any};1use proptest::sample::SizeRange;23use super::BinaryArray;4use crate::bitmap::Bitmap;5use crate::datatypes::ArrowDataType;6use crate::offset::OffsetsBuffer;78pub fn binary_array(size_range: impl Into<SizeRange>) -> impl Strategy<Value = BinaryArray<i64>> {9let size_range = size_range.into();10(11any::<bool>(),12proptest::prelude::any_with::<Vec<(bool, Vec<u8>)>>(size_range.lift()),13)14.prop_map(|(do_validity, values)| {15let validity = do_validity.then(|| Bitmap::from_iter(values.iter().map(|(v, _)| *v)));1617let mut offsets = Vec::with_capacity(values.len() + 1);18offsets.push(0i64);19for (_, value) in &values {20let value = value.len() % 7;21offsets.push(*offsets.last().unwrap() + value as i64);22}2324let mut buffer = Vec::with_capacity((*offsets.last().unwrap()) as usize);25for (_, value) in &values {26buffer.extend_from_slice(value);27}2829let offsets = unsafe { OffsetsBuffer::new_unchecked(offsets.into()) };30BinaryArray::new(ArrowDataType::LargeBinary, offsets, buffer.into(), validity)31})32}333435