#![allow(dead_code)]
#[cfg(feature = "id-compression")]
pub use idpaq::{CompressionError, IdSetCompressor, RocCompressor};
#[cfg(not(feature = "id-compression"))]
mod error;
#[cfg(not(feature = "id-compression"))]
mod traits;
#[cfg(not(feature = "id-compression"))]
pub use error::CompressionError;
#[cfg(not(feature = "id-compression"))]
pub use traits::IdSetCompressor;
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub enum IdCompressionMethod {
#[default]
None,
EliasFano,
Roc,
WaveletTree,
}
#[cfg(all(test, feature = "id-compression"))]
mod tests {
use super::*;
#[test]
fn test_idpaq_integration() {
let compressor = RocCompressor::new();
let ids: Vec<u32> = vec![1, 5, 10, 20, 50, 100];
let universe_size = 1000;
let compressed = compressor.compress_set(&ids, universe_size).unwrap();
let decompressed = compressor
.decompress_set(&compressed, universe_size)
.unwrap();
assert_eq!(ids, decompressed);
}
#[test]
fn test_compression_ratio() {
let compressor = RocCompressor::new();
let ids: Vec<u32> = (0..1000).collect();
let universe_size = 100_000;
let compressed = compressor.compress_set(&ids, universe_size).unwrap();
let ratio = (ids.len() * 4) as f64 / compressed.len() as f64;
assert!(
ratio > 1.5,
"Expected compression ratio > 1.5, got {}",
ratio
);
}
}