Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-arrow/src/array/binary/proptest.rs
6939 views
1
use proptest::prelude::{Strategy, any};
2
use proptest::sample::SizeRange;
3
4
use super::BinaryArray;
5
use crate::bitmap::Bitmap;
6
use crate::datatypes::ArrowDataType;
7
use crate::offset::OffsetsBuffer;
8
9
pub fn binary_array(size_range: impl Into<SizeRange>) -> impl Strategy<Value = BinaryArray<i64>> {
10
let size_range = size_range.into();
11
(
12
any::<bool>(),
13
proptest::prelude::any_with::<Vec<(bool, Vec<u8>)>>(size_range.lift()),
14
)
15
.prop_map(|(do_validity, values)| {
16
let validity = do_validity.then(|| Bitmap::from_iter(values.iter().map(|(v, _)| *v)));
17
18
let mut offsets = Vec::with_capacity(values.len() + 1);
19
offsets.push(0i64);
20
for (_, value) in &values {
21
let value = value.len() % 7;
22
offsets.push(*offsets.last().unwrap() + value as i64);
23
}
24
25
let mut buffer = Vec::with_capacity((*offsets.last().unwrap()) as usize);
26
for (_, value) in &values {
27
buffer.extend_from_slice(value);
28
}
29
30
let offsets = unsafe { OffsetsBuffer::new_unchecked(offsets.into()) };
31
BinaryArray::new(ArrowDataType::LargeBinary, offsets, buffer.into(), validity)
32
})
33
}
34
35