vortex_array/arrays/constant/compute/
min_max.rs1use vortex_error::VortexResult;
5
6use crate::arrays::{ConstantArray, ConstantVTable};
7use crate::compute::{MinMaxKernel, MinMaxKernelAdapter, MinMaxResult};
8use crate::register_kernel;
9
10impl MinMaxKernel for ConstantVTable {
11 fn min_max(&self, array: &ConstantArray) -> VortexResult<Option<MinMaxResult>> {
12 let scalar = array.scalar();
13 if scalar.is_null() || scalar.as_primitive_opt().is_some_and(|p| p.is_nan()) {
14 return Ok(None);
15 }
16 let non_nullable_dtype = scalar.dtype().as_nonnullable();
17 Ok(Some(MinMaxResult {
18 min: scalar.cast(&non_nullable_dtype)?,
19 max: scalar.cast(&non_nullable_dtype)?,
20 }))
21 }
22}
23
24register_kernel!(MinMaxKernelAdapter(ConstantVTable).lift());
25
26#[cfg(test)]
27mod test {
28 use vortex_dtype::Nullability;
29 use vortex_dtype::half::f16;
30 use vortex_scalar::Scalar;
31
32 use crate::arrays::ConstantArray;
33 use crate::compute::min_max;
34
35 #[test]
36 fn test_min_max_nan() {
37 let scalar = Scalar::primitive(f16::NAN, Nullability::NonNullable);
38 let array = ConstantArray::new(scalar, 2).to_array();
39 let result = min_max(&array).unwrap();
40 assert_eq!(result, None);
41 }
42}