mod pgm_index;
pub use pgm_index::{Key, PGMIndex, PGMStats, Segment};
use std::sync::Once;
static RAYON_INIT: Once = Once::new();
pub fn init_rayon_min_threads() {
RAYON_INIT.call_once(|| {
let n = std::cmp::max(4, num_cpus::get());
let _ = rayon::ThreadPoolBuilder::new()
.num_threads(n)
.build_global();
});
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_basic_functionality() {
let data: Vec<u64> = (0..1000).collect();
let index = PGMIndex::new(data, 32);
assert_eq!(index.get(123), Some(123));
assert_eq!(index.get(999), Some(999));
assert_eq!(index.get(1000), None);
}
#[test]
fn test_edge_cases() {
let data = vec![42u64];
let index = PGMIndex::new(data, 1);
assert_eq!(index.get(42), Some(0));
assert_eq!(index.get(41), None);
let data = vec![10u64, 20u64];
let index = PGMIndex::new(data, 1);
assert_eq!(index.get(10), Some(0));
assert_eq!(index.get(20), Some(1));
}
}