Skip to content

Commit b99072f

Browse files
committed
test(array): cover direct varbin builder paths
Signed-off-by: cl <cailue@apache.org>
1 parent aa9c2ca commit b99072f

2 files changed

Lines changed: 87 additions & 5 deletions

File tree

‎vortex-array/src/arrays/dict/array.rs‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,9 @@ mod test {
294294
use crate::arrays::ChunkedArray;
295295
use crate::arrays::DictArray;
296296
use crate::arrays::PrimitiveArray;
297+
use crate::arrays::VarBinViewArray;
297298
use crate::assert_arrays_eq;
299+
use crate::builders::VarBinBufferBuilder;
298300
use crate::builders::builder_with_capacity;
299301
use crate::dtype::DType;
300302
use crate::dtype::NativePType;
@@ -440,6 +442,22 @@ mod test {
440442
.into_array()
441443
}
442444

445+
#[test]
446+
fn test_dict_utf8_append_to_varbin_buffer_builder() -> VortexResult<()> {
447+
let values = VarBinViewArray::from_iter_str(["zero", "one", "two"]);
448+
let dict = DictArray::try_new(buffer![2u8, 0, 2, 1].into_array(), values.into_array())?;
449+
let expected = VarBinViewArray::from_iter_str(["two", "zero", "two", "one"]);
450+
let mut builder =
451+
VarBinBufferBuilder::with_capacity(dict.dtype().clone(), false, dict.len());
452+
let mut ctx = array_session().create_execution_ctx();
453+
454+
dict.into_array()
455+
.append_to_builder(&mut builder, &mut ctx)?;
456+
457+
assert_arrays_eq!(builder.finish_into_varbin(), expected, &mut ctx);
458+
Ok(())
459+
}
460+
443461
#[test]
444462
fn test_dict_array_from_primitive_chunks() -> VortexResult<()> {
445463
let mut ctx = array_session().create_execution_ctx();

‎vortex-array/src/arrays/varbin/builder.rs‎

Lines changed: 69 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -218,11 +218,6 @@ impl VarBinBufferBuilder {
218218
Self { dtype, storage }
219219
}
220220

221-
/// Returns whether this builder uses 64-bit offsets.
222-
pub fn has_large_offsets(&self) -> bool {
223-
matches!(self.storage, TypedBuilder::I64(_))
224-
}
225-
226221
/// Appends decompressed values represented by one contiguous byte buffer and per-row lengths.
227222
pub fn append_values(
228223
&mut self,
@@ -416,12 +411,20 @@ impl ArrayBuilder for VarBinBufferBuilder {
416411

417412
#[cfg(test)]
418413
mod tests {
414+
use rstest::rstest;
419415
use vortex_error::VortexResult;
416+
use vortex_mask::Mask;
420417

418+
use crate::IntoArray;
421419
use crate::VortexSessionExecute;
422420
use crate::array_session;
421+
use crate::arrays::VarBinArray;
422+
use crate::arrays::VarBinViewArray;
423423
use crate::arrays::varbin::VarBinArrayExt;
424+
use crate::arrays::varbin::builder::VarBinBufferBuilder;
424425
use crate::arrays::varbin::builder::VarBinBuilder;
426+
use crate::assert_arrays_eq;
427+
use crate::builders::ArrayBuilder;
425428
use crate::dtype::DType;
426429
use crate::dtype::Nullability::Nullable;
427430
use crate::expr::stats::Precision;
@@ -453,6 +456,67 @@ mod tests {
453456
);
454457
}
455458

459+
#[rstest]
460+
#[case(false)]
461+
#[case(true)]
462+
fn test_append_varbin_to_buffer_builder(#[case] large_offsets: bool) -> VortexResult<()> {
463+
let source =
464+
VarBinArray::from_iter([Some("hello"), None, Some("world")], DType::Utf8(Nullable));
465+
let mut builder =
466+
VarBinBufferBuilder::with_capacity(source.dtype().clone(), large_offsets, source.len());
467+
let mut ctx = array_session().create_execution_ctx();
468+
469+
source
470+
.clone()
471+
.into_array()
472+
.append_to_builder(&mut builder, &mut ctx)?;
473+
474+
assert_arrays_eq!(builder.finish_into_varbin(), source, &mut ctx);
475+
Ok(())
476+
}
477+
478+
#[rstest]
479+
#[case(false)]
480+
#[case(true)]
481+
fn test_array_builder_methods(#[case] large_offsets: bool) -> VortexResult<()> {
482+
let mut ctx = array_session().create_execution_ctx();
483+
for validity in [
484+
Mask::new_true(3),
485+
Mask::new_false(3),
486+
Mask::from_iter([true, false, true]),
487+
] {
488+
let mut builder =
489+
VarBinBufferBuilder::with_capacity(DType::Utf8(Nullable), large_offsets, 0);
490+
assert!(builder.as_any().is::<VarBinBufferBuilder>());
491+
builder.reserve_exact(3);
492+
builder.append_zero();
493+
builder.append_scalar(&Scalar::utf8("hello", Nullable))?;
494+
builder.append_null();
495+
assert_eq!(builder.len(), 3);
496+
builder.set_validity(validity.clone());
497+
498+
let result = builder.finish_into_canonical(&mut ctx).into_array();
499+
assert_eq!(result.validity()?.execute_mask(3, &mut ctx)?, validity);
500+
}
501+
Ok(())
502+
}
503+
504+
#[test]
505+
fn test_append_all_null_varbinview_to_buffer_builder() -> VortexResult<()> {
506+
let source = VarBinViewArray::from_iter([None::<&str>, None], DType::Utf8(Nullable));
507+
let mut builder =
508+
VarBinBufferBuilder::with_capacity(source.dtype().clone(), false, source.len());
509+
let mut ctx = array_session().create_execution_ctx();
510+
511+
source
512+
.clone()
513+
.into_array()
514+
.append_to_builder(&mut builder, &mut ctx)?;
515+
516+
assert_arrays_eq!(builder.finish_into_varbin(), source, &mut ctx);
517+
Ok(())
518+
}
519+
456520
#[test]
457521
fn offsets_have_is_sorted_stat() -> VortexResult<()> {
458522
let mut builder = VarBinBuilder::<i32>::with_capacity(0);

0 commit comments

Comments
 (0)