vortex_array/arrays/bool/vtable/
operations.rs1use vortex_error::VortexResult;
5
6use crate::ExecutionCtx;
7use crate::arrays::Bool;
8use crate::arrays::bool::vtable::BoolArray;
9use crate::scalar::Scalar;
10use crate::vtable::OperationsVTable;
11
12impl OperationsVTable<Bool> for Bool {
13 fn scalar_at(array: &BoolArray, index: usize, _ctx: &mut ExecutionCtx) -> VortexResult<Scalar> {
14 Ok(Scalar::bool(
15 array.to_bit_buffer().value(index),
16 array.dtype().nullability(),
17 ))
18 }
19}
20
21#[cfg(test)]
22mod tests {
23 use std::iter;
24
25 use super::*;
26 use crate::ToCanonical;
27 use crate::assert_arrays_eq;
28
29 #[test]
30 fn test_slice_hundred_elements() {
31 let arr = BoolArray::from_iter(iter::repeat_n(Some(true), 100));
32 let sliced_arr = arr.slice(8..16).unwrap().to_bool();
33 assert_eq!(sliced_arr.len(), 8);
34 assert_eq!(sliced_arr.to_bit_buffer().len(), 8);
35 assert_eq!(sliced_arr.to_bit_buffer().offset(), 0);
36 }
37
38 #[test]
39 fn test_slice() {
40 let arr = BoolArray::from_iter([Some(true), Some(true), None, Some(false), None]);
41 let sliced_arr = arr.slice(1..4).unwrap().to_bool();
42
43 assert_arrays_eq!(
44 sliced_arr,
45 BoolArray::from_iter([Some(true), None, Some(false)])
46 );
47 }
48}