@@ -170,61 +170,75 @@ mod tests {
170170 Ok ( ( ) )
171171 }
172172
173+ /// The following three test will check if the validity cases
174+ /// are correctly implemented for the three branches.
173175 #[ rstest]
174176 #[ case( & [ 10i8 , 20 , 30 , 40 , 50 ] ) ]
175- fn validity < T > ( #[ case] present : & [ T ] ) -> VortexResult < ( ) >
177+ fn validity_all_true < T > ( #[ case] present : & [ T ] ) -> VortexResult < ( ) >
176178 where
177179 T : Copy + NativePType + Into < PValue > ,
178180 {
179- {
180- let ctx = setup ( ) ?;
181- let all_valid = PrimitiveArray :: from_option_iter ( present. iter ( ) . map ( |& v| Some ( v) ) ) ;
182- let bloom_filter = build_filter (
183- all_valid. into_array ( ) ,
184- DType :: Primitive ( T :: PTYPE , Nullability :: Nullable ) ,
185- ctx,
186- ) ?;
187- for & v in present {
188- let scalar = Scalar :: primitive ( v, Nullability :: Nullable ) ;
189- assert ! ( bloom_filter. contains_valid_scalar( & scalar) ?) ;
190- }
181+ let ctx = setup ( ) ?;
182+ let all_valid = PrimitiveArray :: from_option_iter ( present. iter ( ) . map ( |& v| Some ( v) ) ) ;
183+ let bloom_filter = build_filter (
184+ all_valid. into_array ( ) ,
185+ DType :: Primitive ( T :: PTYPE , Nullability :: Nullable ) ,
186+ ctx,
187+ ) ?;
188+
189+ for & v in present {
190+ let scalar = Scalar :: primitive ( v, Nullability :: Nullable ) ;
191+ assert ! ( bloom_filter. contains_valid_scalar( & scalar) ?) ;
191192 }
192193
193- // Mask::AllFalse: every position null. Nothing should ever be found — including the
194- // `T::default()` filler that `from_option_iter` writes into null slots internally.
195- {
196- let ctx = setup ( ) ?;
197- let all_invalid = PrimitiveArray :: from_option_iter ( present. iter ( ) . map ( |_| None :: < T > ) ) ;
198- let bloom_filter = build_filter (
199- all_invalid. into_array ( ) ,
200- DType :: Primitive ( T :: PTYPE , Nullability :: Nullable ) ,
201- ctx,
202- ) ?;
203- for & v in present {
204- let scalar = Scalar :: primitive ( v, Nullability :: Nullable ) ;
205- assert ! ( !bloom_filter. contains_valid_scalar( & scalar) ?) ;
206- }
194+ Ok ( ( ) )
195+ }
196+
197+ #[ rstest]
198+ #[ case( & [ 10i8 , 20 , 30 , 40 , 50 ] ) ]
199+ fn validity_all_false < T > ( #[ case] present : & [ T ] ) -> VortexResult < ( ) >
200+ where
201+ T : Copy + NativePType + Into < PValue > ,
202+ {
203+ let ctx = setup ( ) ?;
204+ let all_invalid = PrimitiveArray :: from_option_iter ( present. iter ( ) . map ( |_| None :: < T > ) ) ;
205+ let bloom_filter = build_filter (
206+ all_invalid. into_array ( ) ,
207+ DType :: Primitive ( T :: PTYPE , Nullability :: Nullable ) ,
208+ ctx,
209+ ) ?;
210+
211+ for & v in present {
212+ let scalar = Scalar :: primitive ( v, Nullability :: Nullable ) ;
213+ assert ! ( !bloom_filter. contains_valid_scalar( & scalar) ?) ;
207214 }
208215
209- // Mask::Values: alternating valid/null. Only the valid positions should be members,
210- // and the default filler at null slots must not leak through as a false member.
211- {
212- let ctx = setup ( ) ?;
213- let mixed: Vec < Option < T > > = present
214- . iter ( )
215- . enumerate ( )
216- . map ( |( i, & v) | if i % 2 == 0 { Some ( v) } else { None } )
217- . collect ( ) ;
218- let bloom_filter = build_filter (
219- PrimitiveArray :: from_option_iter ( mixed) . into_array ( ) ,
220- DType :: Primitive ( T :: PTYPE , Nullability :: Nullable ) ,
221- ctx,
222- ) ?;
223- for ( i, & v) in present. iter ( ) . enumerate ( ) {
224- if i % 2 == 0 {
225- let scalar = Scalar :: primitive ( v, Nullability :: Nullable ) ;
226- assert ! ( bloom_filter. contains_valid_scalar( & scalar) ?) ;
227- }
216+ Ok ( ( ) )
217+ }
218+
219+ #[ rstest]
220+ #[ case( & [ 10i8 , 20 , 30 , 40 , 50 ] ) ]
221+ fn validity_mixed < T > ( #[ case] present : & [ T ] ) -> VortexResult < ( ) >
222+ where
223+ T : Copy + NativePType + Into < PValue > ,
224+ {
225+ let ctx = setup ( ) ?;
226+ let mixed: Vec < Option < T > > = present
227+ . iter ( )
228+ . enumerate ( )
229+ . map ( |( i, & v) | if i % 2 == 0 { Some ( v) } else { None } )
230+ . collect ( ) ;
231+
232+ let bloom_filter = build_filter (
233+ PrimitiveArray :: from_option_iter ( mixed) . into_array ( ) ,
234+ DType :: Primitive ( T :: PTYPE , Nullability :: Nullable ) ,
235+ ctx,
236+ ) ?;
237+
238+ for ( i, & v) in present. iter ( ) . enumerate ( ) {
239+ if i % 2 == 0 {
240+ let scalar = Scalar :: primitive ( v, Nullability :: Nullable ) ;
241+ assert ! ( bloom_filter. contains_valid_scalar( & scalar) ?) ;
228242 }
229243 }
230244
0 commit comments