Path: blob/main/crates/polars-parquet/src/parquet/encoding/byte_stream_split/mod.rs
7887 views
mod decoder;12pub use decoder::Decoder;34#[cfg(test)]5mod tests {6use super::*;7use crate::parquet::error::ParquetError;8use crate::parquet::types::NativeType;910#[test]11fn round_trip_f32() -> Result<(), ParquetError> {12let data = vec![1.0e-2_f32, 2.5_f32, 3.0e2_f32];13let mut buffer = vec![];14encode(&data, &mut buffer);1516let mut decoder = Decoder::try_new(&buffer, size_of::<f32>())?;17let values = decoder18.iter_converted(|bytes| f32::from_le_bytes(bytes.try_into().unwrap()))19.collect::<Vec<_>>();2021assert_eq!(data, values);2223Ok(())24}2526#[test]27fn round_trip_f64() -> Result<(), ParquetError> {28let data = vec![1.0e-2_f64, 2.5_f64, 3.0e2_f64];29let mut buffer = vec![];30encode(&data, &mut buffer);3132let mut decoder = Decoder::try_new(&buffer, size_of::<f64>())?;33let values = decoder34.iter_converted(|bytes| f64::from_le_bytes(bytes.try_into().unwrap()))35.collect::<Vec<_>>();3637assert_eq!(data, values);3839Ok(())40}4142#[test]43fn fails_for_invalid_values_size() -> Result<(), ParquetError> {44let buffer = vec![0; 12];4546let result = Decoder::try_new(&buffer, 8);47assert!(result.is_err());4849Ok(())50}5152#[test]53fn fails_for_invalid_element_size() -> Result<(), ParquetError> {54let buffer = vec![0; 16];5556let result = Decoder::try_new(&buffer, 16);57assert!(result.is_err());5859Ok(())60}6162fn encode<T: NativeType>(data: &[T], buffer: &mut Vec<u8>) {63let element_size = size_of::<T>();64let num_elements = data.len();65let total_length = size_of_val(data);66buffer.resize(total_length, 0);6768for (i, v) in data.iter().enumerate() {69let value_bytes = v.to_le_bytes();70let value_bytes_ref = value_bytes.as_ref();71for n in 0..element_size {72buffer[(num_elements * n) + i] = value_bytes_ref[n];73}74}75}76}777879