mod cast;
mod mask;
pub(crate) mod rules;
mod slice;
mod take;
mod zip;
#[cfg(test)]
mod tests {
use vortex_buffer::buffer;
use vortex_error::VortexResult;
use crate::IntoArray;
use crate::arrays::VarBinViewArray;
#[expect(deprecated)]
use crate::canonical::ToCanonical as _;
#[test]
fn take_nullable() -> VortexResult<()> {
let arr = VarBinViewArray::from_iter_nullable_str([
Some("one"),
None,
Some("three"),
Some("four"),
None,
Some("six"),
]);
let taken = arr.take(buffer![0, 3].into_array())?;
assert!(taken.dtype().is_nullable());
let mut ctx = array_session().create_execution_ctx();
#[expect(deprecated)]
let taken = taken.to_varbinview();
let mask = taken.validity()?.execute_mask(taken.len(), &mut ctx)?;
let result = (0..taken.len())
.map(|i| {
mask.value(i)
.then(|| unsafe { String::from_utf8_unchecked(taken.bytes_at(i).to_vec()) })
})
.collect::<Vec<_>>();
assert_eq!(result, [Some("one".to_string()), Some("four".to_string())]);
Ok(())
}
use rstest::rstest;
use crate::VortexSessionExecute;
use crate::array_session;
use crate::compute::conformance::consistency::test_array_consistency;
use crate::dtype::DType;
use crate::dtype::Nullability;
#[rstest]
#[case::varbinview_str(VarBinViewArray::from_iter(
["hello", "world", "test", "data", "array"].map(Some),
DType::Utf8(Nullability::NonNullable),
))]
#[case::varbinview_nullable_str(VarBinViewArray::from_iter_nullable_str([
Some("hello"),
None,
Some("test"),
Some("data"),
None,
]))]
#[case::varbinview_binary(VarBinViewArray::from_iter(
[b"hello".as_slice(), b"world", b"test", b"data", b"array"].map(Some),
DType::Binary(Nullability::NonNullable),
))]
#[case::varbinview_empty_strings(VarBinViewArray::from_iter(
["", "non-empty", "", "another", ""].map(Some),
DType::Utf8(Nullability::NonNullable),
))]
#[case::varbinview_single(VarBinViewArray::from_iter(
["single"].map(Some),
DType::Utf8(Nullability::NonNullable),
))]
#[case::varbinview_large_strings(VarBinViewArray::from_iter(
["a".repeat(100), "b".repeat(200), "c".repeat(150)].map(Some),
DType::Utf8(Nullability::NonNullable),
))]
#[case::varbinview_all_null(VarBinViewArray::from_iter_nullable_str([
None::<&str>, None, None, None
]))]
fn test_varbinview_consistency(#[case] array: VarBinViewArray) {
test_array_consistency(
&array.into_array(),
&mut array_session().create_execution_ctx(),
);
}
}