vortex_array/arrays/bool/vtable/
operations.rs1use vortex_error::VortexResult;
5
6use crate::ExecutionCtx;
7use crate::array::ArrayView;
8use crate::array::OperationsVTable;
9use crate::arrays::Bool;
10use crate::arrays::bool::BoolArrayExt;
11use crate::scalar::Scalar;
12
13impl OperationsVTable<Bool> for Bool {
14 fn scalar_at(
15 array: ArrayView<'_, Bool>,
16 index: usize,
17 _ctx: &mut ExecutionCtx,
18 ) -> VortexResult<Scalar> {
19 Ok(Scalar::bool(
20 array.bit_buffer_view().value(index),
21 array.dtype().nullability(),
22 ))
23 }
24}
25
26#[cfg(test)]
27mod tests {
28 use std::iter;
29
30 use crate::IntoArray;
31 use crate::VortexSessionExecute;
32 use crate::array_session;
33 use crate::arrays::BoolArray;
34 use crate::arrays::bool::BoolArrayExt;
35 use crate::assert_arrays_eq;
36
37 #[test]
38 fn test_slice_hundred_elements() {
39 let mut ctx = array_session().create_execution_ctx();
40 let arr = BoolArray::from_iter(iter::repeat_n(Some(true), 100));
41 let sliced_arr = arr
42 .into_array()
43 .slice(8..16)
44 .unwrap()
45 .execute::<BoolArray>(&mut ctx)
46 .unwrap();
47 assert_eq!(sliced_arr.len(), 8);
48 assert_eq!(sliced_arr.to_bit_buffer().len(), 8);
49 assert_eq!(sliced_arr.to_bit_buffer().offset(), 0);
50 }
51
52 #[test]
53 fn test_slice() {
54 let mut ctx = array_session().create_execution_ctx();
55 let arr = BoolArray::from_iter([Some(true), Some(true), None, Some(false), None]);
56 let sliced_arr = arr
57 .into_array()
58 .slice(1..4)
59 .unwrap()
60 .execute::<BoolArray>(&mut ctx)
61 .unwrap();
62
63 assert_arrays_eq!(
64 sliced_arr,
65 BoolArray::from_iter([Some(true), None, Some(false)]),
66 &mut ctx
67 );
68 }
69}