use std::io::Write;
use goldenfile::Mint;
use goldenfile::differs::binary_diff;
use itertools::Itertools;
use vortex_error::VortexResult;
use crate::DeserializeMetadata;
use crate::SerializeMetadata;
use crate::arrays::BoolArray;
#[allow(clippy::unwrap_used)]
pub fn check_metadata<T>(name: &str, metadata: T)
where
T: SerializeMetadata,
T: DeserializeMetadata,
{
let mut mint = Mint::new("goldenfiles/");
let meta = metadata.serialize();
let mut f = mint
.new_goldenfile_with_differ(name, Box::new(binary_diff))
.unwrap();
f.write_all(&meta).unwrap();
}
pub fn to_int_indices(indices_bits: BoolArray) -> VortexResult<Vec<u64>> {
let buffer = indices_bits.to_bit_buffer();
let mask = indices_bits.validity_mask()?;
Ok(buffer
.iter()
.enumerate()
.filter_map(|(idx, v)| (v && mask.value(idx)).then_some(idx as u64))
.collect_vec())
}