#[cfg(feature = "id-compression")]
pub use cnk::{
choose_method, compress_set_auto, compress_set_enveloped, decompress_set_auto,
decompress_set_enveloped, AutoConfig, ChooseConfig, CodecChoice, CompressionError,
IdCompressionMethod, IdListStats, 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;
#[cfg(not(feature = "id-compression"))]
#[derive(Clone, Debug, Default, PartialEq, Eq)]
pub enum IdCompressionMethod {
#[default]
None,
EliasFano,
PartitionedEliasFano,
Roc,
WaveletTree,
}
#[cfg(all(test, feature = "id-compression"))]
mod tests {
use super::*;
#[test]
fn test_cnk_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
);
}
}