vortex_array/
test_harness.rs

1// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: Copyright the Vortex contributors
3
4use std::io::Write;
5
6use goldenfile::Mint;
7use goldenfile::differs::binary_diff;
8use itertools::Itertools;
9use vortex_error::VortexResult;
10
11use crate::arrays::BoolArray;
12use crate::{DeserializeMetadata, SerializeMetadata};
13
14/// Check that a named metadata matches its previous versioning.
15///
16/// Goldenfile takes care of checking for equality against a checked-in file.
17#[allow(clippy::unwrap_used)]
18pub fn check_metadata<T>(name: &str, metadata: T)
19where
20    T: SerializeMetadata,
21    T: DeserializeMetadata,
22{
23    let mut mint = Mint::new("goldenfiles/");
24    let meta = metadata.serialize();
25    let mut f = mint
26        .new_goldenfile_with_differ(name, Box::new(binary_diff))
27        .unwrap();
28    f.write_all(&meta).unwrap();
29}
30
31/// Outputs the indices of the true values in a BoolArray
32pub fn to_int_indices(indices_bits: BoolArray) -> VortexResult<Vec<u64>> {
33    let buffer = indices_bits.boolean_buffer();
34    let mask = indices_bits.validity_mask();
35    Ok(buffer
36        .iter()
37        .enumerate()
38        .filter_map(|(idx, v)| (v && mask.value(idx)).then_some(idx as u64))
39        .collect_vec())
40}