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