use vortex_error::VortexResult;
use crate::ExecutionCtx;
use crate::array::ArrayView;
use crate::array::OperationsVTable;
use crate::arrays::Bool;
use crate::arrays::bool::BoolArrayExt;
use crate::scalar::Scalar;
impl OperationsVTable<Bool> for Bool {
fn scalar_at(
array: ArrayView<'_, Bool>,
index: usize,
_ctx: &mut ExecutionCtx,
) -> VortexResult<Scalar> {
Ok(Scalar::bool(
array.bit_buffer_view().value(index),
array.dtype().nullability(),
))
}
}
#[cfg(test)]
mod tests {
use std::iter;
use crate::IntoArray;
use crate::VortexSessionExecute;
use crate::array_session;
use crate::arrays::BoolArray;
use crate::arrays::bool::BoolArrayExt;
use crate::assert_arrays_eq;
#[test]
fn test_slice_hundred_elements() {
let mut ctx = array_session().create_execution_ctx();
let arr = BoolArray::from_iter(iter::repeat_n(Some(true), 100));
let sliced_arr = arr
.into_array()
.slice(8..16)
.unwrap()
.execute::<BoolArray>(&mut ctx)
.unwrap();
assert_eq!(sliced_arr.len(), 8);
assert_eq!(sliced_arr.to_bit_buffer().len(), 8);
assert_eq!(sliced_arr.to_bit_buffer().offset(), 0);
}
#[test]
fn test_slice() {
let mut ctx = array_session().create_execution_ctx();
let arr = BoolArray::from_iter([Some(true), Some(true), None, Some(false), None]);
let sliced_arr = arr
.into_array()
.slice(1..4)
.unwrap()
.execute::<BoolArray>(&mut ctx)
.unwrap();
assert_arrays_eq!(
sliced_arr,
BoolArray::from_iter([Some(true), None, Some(false)]),
&mut ctx
);
}
}