Skip to content

Commit 8f218ae

Browse files
fix[fuzz]: apply mask to validity in baseline (#5249)
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
1 parent 86f3bf9 commit 8f218ae

File tree

1 file changed

+9
-29
lines changed

1 file changed

+9
-29
lines changed

fuzz/src/array/mask.rs

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
11
// SPDX-License-Identifier: Apache-2.0
22
// SPDX-FileCopyrightText: Copyright the Vortex contributors
33

4-
use std::ops::Not;
54
use std::sync::Arc;
65

76
use vortex_array::arrays::{
87
BoolArray, DecimalArray, ExtensionArray, FixedSizeListArray, ListViewArray, PrimitiveArray,
98
StructArray, VarBinViewArray,
109
};
11-
use vortex_array::validity::Validity;
1210
use vortex_array::vtable::ValidityHelper;
13-
use vortex_array::{ArrayRef, Canonical, IntoArray, ToCanonical};
11+
use vortex_array::{ArrayRef, Canonical, IntoArray};
1412
use vortex_dtype::{ExtDType, match_each_decimal_value_type};
1513
use vortex_error::{VortexResult, VortexUnwrap};
16-
use vortex_mask::{AllOr, Mask};
14+
use vortex_mask::Mask;
1715

1816
/// Apply mask on the canonical form of the array to get a consistent baseline.
1917
/// This implementation manually applies the mask to each canonical type
@@ -25,11 +23,11 @@ pub fn mask_canonical_array(canonical: Canonical, mask: &Mask) -> VortexResult<A
2523
array.into_array()
2624
}
2725
Canonical::Bool(array) => {
28-
let new_validity = apply_mask_to_validity(array.validity(), mask);
26+
let new_validity = array.validity().mask(mask);
2927
BoolArray::from_bit_buffer(array.bit_buffer().clone(), new_validity).into_array()
3028
}
3129
Canonical::Primitive(array) => {
32-
let new_validity = apply_mask_to_validity(array.validity(), mask);
30+
let new_validity = array.validity().mask(mask);
3331
PrimitiveArray::from_byte_buffer(
3432
array.byte_buffer().clone(),
3533
array.ptype(),
@@ -38,14 +36,14 @@ pub fn mask_canonical_array(canonical: Canonical, mask: &Mask) -> VortexResult<A
3836
.into_array()
3937
}
4038
Canonical::Decimal(array) => {
41-
let new_validity = apply_mask_to_validity(array.validity(), mask);
39+
let new_validity = array.validity().mask(mask);
4240
match_each_decimal_value_type!(array.values_type(), |D| {
4341
DecimalArray::new(array.buffer::<D>(), array.decimal_dtype(), new_validity)
4442
.into_array()
4543
})
4644
}
4745
Canonical::VarBinView(array) => {
48-
let new_validity = apply_mask_to_validity(array.validity(), mask);
46+
let new_validity = array.validity().mask(mask);
4947
VarBinViewArray::new(
5048
array.views().clone(),
5149
array.buffers().clone(),
@@ -55,7 +53,7 @@ pub fn mask_canonical_array(canonical: Canonical, mask: &Mask) -> VortexResult<A
5553
.into_array()
5654
}
5755
Canonical::List(array) => {
58-
let new_validity = apply_mask_to_validity(array.validity(), mask);
56+
let new_validity = array.validity().mask(mask);
5957

6058
// SAFETY: Since we are only masking the validity and everything else comes from an
6159
// already valid `ListViewArray`, all of the invariants are still upheld.
@@ -71,7 +69,7 @@ pub fn mask_canonical_array(canonical: Canonical, mask: &Mask) -> VortexResult<A
7169
.into_array()
7270
}
7371
Canonical::FixedSizeList(array) => {
74-
let new_validity = apply_mask_to_validity(array.validity(), mask);
72+
let new_validity = array.validity().mask(mask);
7573
FixedSizeListArray::new(
7674
array.elements().clone(),
7775
array.list_size(),
@@ -81,7 +79,7 @@ pub fn mask_canonical_array(canonical: Canonical, mask: &Mask) -> VortexResult<A
8179
.into_array()
8280
}
8381
Canonical::Struct(array) => {
84-
let new_validity = apply_mask_to_validity(array.validity(), mask);
82+
let new_validity = array.validity().mask(mask);
8583
StructArray::try_new_with_dtype(
8684
array.fields().clone(),
8785
array.struct_fields().clone(),
@@ -113,24 +111,6 @@ pub fn mask_canonical_array(canonical: Canonical, mask: &Mask) -> VortexResult<A
113111
})
114112
}
115113

116-
fn apply_mask_to_validity(validity: &Validity, mask: &Mask) -> Validity {
117-
match mask.bit_buffer() {
118-
AllOr::All => Validity::AllInvalid,
119-
AllOr::None => validity.clone(),
120-
AllOr::Some(make_invalid) => match validity {
121-
Validity::NonNullable | Validity::AllValid => {
122-
Validity::Array(BoolArray::from(make_invalid.not()).into_array())
123-
}
124-
Validity::AllInvalid => Validity::AllInvalid,
125-
Validity::Array(is_valid) => {
126-
let is_valid = is_valid.to_bool();
127-
let keep_valid = make_invalid.not();
128-
Validity::from(is_valid.bit_buffer() & &keep_valid)
129-
}
130-
},
131-
}
132-
}
133-
134114
#[cfg(test)]
135115
mod tests {
136116
use vortex_array::arrays::{

0 commit comments

Comments
 (0)