33
44use std:: ops:: BitAnd ;
55
6+ use Nullability :: NonNullable ;
7+ use vortex_dtype:: Nullability ;
68use vortex_error:: VortexResult ;
79use vortex_mask:: Mask ;
810use vortex_scalar:: Scalar ;
@@ -30,15 +32,15 @@ impl MinMaxKernel for BoolVTable {
3032 let Some ( slice) = true_slices. next ( ) else {
3133 // all false
3234 return Ok ( Some ( MinMaxResult {
33- min : Scalar :: bool ( false , array . dtype ( ) . nullability ( ) ) ,
34- max : Scalar :: bool ( false , array . dtype ( ) . nullability ( ) ) ,
35+ min : Scalar :: bool ( false , NonNullable ) ,
36+ max : Scalar :: bool ( false , NonNullable ) ,
3537 } ) ) ;
3638 } ;
3739 if slice. 0 == 0 && slice. 1 == array. len ( ) {
3840 // all true
3941 return Ok ( Some ( MinMaxResult {
40- min : Scalar :: bool ( true , array . dtype ( ) . nullability ( ) ) ,
41- max : Scalar :: bool ( true , array . dtype ( ) . nullability ( ) ) ,
42+ min : Scalar :: bool ( true , NonNullable ) ,
43+ max : Scalar :: bool ( true , NonNullable ) ,
4244 } ) ) ;
4345 } ;
4446
@@ -53,16 +55,16 @@ impl MinMaxKernel for BoolVTable {
5355 let Some ( _) = false_slices. next ( ) else {
5456 // In this case we don't have any false values which means we are all true and null
5557 return Ok ( Some ( MinMaxResult {
56- min : Scalar :: bool ( true , array . dtype ( ) . nullability ( ) ) ,
57- max : Scalar :: bool ( true , array . dtype ( ) . nullability ( ) ) ,
58+ min : Scalar :: bool ( true , NonNullable ) ,
59+ max : Scalar :: bool ( true , NonNullable ) ,
5860 } ) ) ;
5961 } ;
6062 }
6163 }
6264
6365 Ok ( Some ( MinMaxResult {
64- min : Scalar :: bool ( false , array . dtype ( ) . nullability ( ) ) ,
65- max : Scalar :: bool ( true , array . dtype ( ) . nullability ( ) ) ,
66+ min : Scalar :: bool ( false , NonNullable ) ,
67+ max : Scalar :: bool ( true , NonNullable ) ,
6668 } ) )
6769 }
6870}
@@ -71,47 +73,47 @@ register_kernel!(MinMaxKernelAdapter(BoolVTable).lift());
7173
7274#[ cfg( test) ]
7375mod tests {
74- use vortex_dtype:: { DType , Nullability } ;
76+ use Nullability :: NonNullable ;
77+ use vortex_dtype:: Nullability ;
7578 use vortex_scalar:: Scalar ;
7679
7780 use crate :: arrays:: BoolArray ;
7881 use crate :: compute:: { MinMaxResult , min_max} ;
7982
8083 #[ test]
8184 fn test_min_max_nulls ( ) {
82- let dtype = DType :: Bool ( Nullability :: Nullable ) ;
8385 assert_eq ! (
8486 min_max( BoolArray :: from_iter( vec![ Some ( true ) , Some ( true ) , None , None ] ) . as_ref( ) )
8587 . unwrap( ) ,
8688 Some ( MinMaxResult {
87- min: Scalar :: new ( dtype . clone ( ) , true . into ( ) ) ,
88- max: Scalar :: new ( dtype . clone ( ) , true . into ( ) ) ,
89+ min: Scalar :: bool ( true , NonNullable ) ,
90+ max: Scalar :: bool ( true , NonNullable ) ,
8991 } )
9092 ) ;
9193
9294 assert_eq ! (
9395 min_max( BoolArray :: from_iter( vec![ None , Some ( true ) , Some ( true ) ] ) . as_ref( ) ) . unwrap( ) ,
9496 Some ( MinMaxResult {
95- min: Scalar :: new ( dtype . clone ( ) , true . into ( ) ) ,
96- max: Scalar :: new ( dtype . clone ( ) , true . into ( ) ) ,
97+ min: Scalar :: bool ( true , NonNullable ) ,
98+ max: Scalar :: bool ( true , NonNullable ) ,
9799 } )
98100 ) ;
99101
100102 assert_eq ! (
101103 min_max( BoolArray :: from_iter( vec![ None , Some ( true ) , Some ( true ) , None ] ) . as_ref( ) )
102104 . unwrap( ) ,
103105 Some ( MinMaxResult {
104- min: Scalar :: new ( dtype . clone ( ) , true . into ( ) ) ,
105- max: Scalar :: new ( dtype . clone ( ) , true . into ( ) ) ,
106+ min: Scalar :: bool ( true , NonNullable ) ,
107+ max: Scalar :: bool ( true , NonNullable ) ,
106108 } )
107109 ) ;
108110
109111 assert_eq ! (
110112 min_max( BoolArray :: from_iter( vec![ Some ( false ) , Some ( false ) , None , None ] ) . as_ref( ) )
111113 . unwrap( ) ,
112114 Some ( MinMaxResult {
113- min: Scalar :: new ( dtype . clone ( ) , false . into ( ) ) ,
114- max: Scalar :: new ( dtype , false . into ( ) ) ,
115+ min: Scalar :: bool ( false , NonNullable ) ,
116+ max: Scalar :: bool ( false , NonNullable ) ,
115117 } )
116118 ) ;
117119 }
0 commit comments