use vortex_array::IntoArray;
use vortex_array::ToCanonical;
use vortex_array::compute::IsSortedKernel;
use vortex_array::compute::IsSortedKernelAdapter;
use vortex_array::compute::is_sorted;
use vortex_array::compute::is_strict_sorted;
use vortex_array::register_kernel;
use vortex_error::VortexResult;
use crate::FoRArray;
use crate::FoRVTable;
impl IsSortedKernel for FoRVTable {
fn is_sorted(&self, array: &FoRArray) -> VortexResult<Option<bool>> {
let encoded = array.encoded().to_primitive();
is_sorted(
&encoded
.reinterpret_cast(encoded.ptype().to_unsigned())
.into_array(),
)
}
fn is_strict_sorted(&self, array: &FoRArray) -> VortexResult<Option<bool>> {
let encoded = array.encoded().to_primitive();
is_strict_sorted(
&encoded
.reinterpret_cast(encoded.ptype().to_unsigned())
.into_array(),
)
}
}
register_kernel!(IsSortedKernelAdapter(FoRVTable).lift());
#[cfg(test)]
mod test {
use vortex_array::IntoArray;
use vortex_array::arrays::PrimitiveArray;
use vortex_array::compute::is_sorted;
use vortex_array::validity::Validity;
use vortex_buffer::buffer;
use crate::FoRArray;
#[test]
fn test_sorted() {
let a = PrimitiveArray::new(buffer![-1, 0, i8::MAX], Validity::NonNullable);
let b = FoRArray::encode(a).unwrap();
assert!(
is_sorted(&b.clone().into_array()).unwrap().unwrap(),
"{}",
b.encoded().display_values()
);
let a = PrimitiveArray::new(buffer![i8::MIN, 0, i8::MAX], Validity::NonNullable);
let b = FoRArray::encode(a).unwrap();
assert!(
is_sorted(&b.clone().into_array()).unwrap().unwrap(),
"{}",
b.encoded().display_values()
);
let a = PrimitiveArray::new(buffer![i8::MIN, 0, 30, 127], Validity::NonNullable);
let b = FoRArray::encode(a).unwrap();
assert!(
is_sorted(&b.clone().into_array()).unwrap().unwrap(),
"{}",
b.encoded().display_values()
);
let a = PrimitiveArray::new(buffer![i8::MIN, -3, -1], Validity::NonNullable);
let b = FoRArray::encode(a).unwrap();
assert!(
is_sorted(&b.clone().into_array()).unwrap().unwrap(),
"{}",
b.encoded().display_values()
);
let a = PrimitiveArray::new(buffer![-10, -3, -1], Validity::NonNullable);
let b = FoRArray::encode(a).unwrap();
assert!(
is_sorted(&b.clone().into_array()).unwrap().unwrap(),
"{}",
b.encoded().display_values()
);
let a = PrimitiveArray::new(buffer![-10, -11, -1], Validity::NonNullable);
let b = FoRArray::encode(a).unwrap();
assert!(
!is_sorted(&b.clone().into_array()).unwrap().unwrap(),
"{}",
b.encoded().display_values()
);
let a = PrimitiveArray::new(buffer![-10, i8::MIN, -1], Validity::NonNullable);
let b = FoRArray::encode(a).unwrap();
assert!(
!is_sorted(&b.clone().into_array()).unwrap().unwrap(),
"{}",
b.encoded().display_values()
);
}
}