#[cfg(test)]
mod tests {
use super::super::memory::MemoryMonitor;
use super::super::memory::constraints;
use super::*;
use std::path::PathBuf;
use tempfile::tempdir;
#[test]
fn test_merge_memory_basic() {
let db1 = RKDatabase::from_kmer_pairs(
vec![(0x1234, 10), (0x5678, 20), (0x9ABC, 30)],
31,
false,
true
).unwrap();
let db2 = RKDatabase::from_kmer_pairs(
vec![(0x1234, 5), (0xDEF0, 15), (0x9ABC, 25)],
31,
false,
true
).unwrap();
let temp_dir = tempdir().unwrap();
let db1_path = temp_dir.path().join("db1.rkdb");
let db2_path = temp_dir.path().join("db2.rkdb");
db1.to_file_path(&db1_path).unwrap();
db2.to_file_path(&db2_path).unwrap();
let mut monitor = MemoryMonitor::new();
let config = MergeConfig {
max_memory_usage: constraints::SMALL.max_usage,
chunk_size: 100,
temp_dir: temp_dir.path().to_path_buf(),
use_streaming: false,
use_prefix_cache: false,
verbose: false,
};
let merged_db = RKDatabase::merge_databases(&[db1_path, db2_path], &config)
.expect("Merge should succeed");
monitor.record_reading();
let all_kmers = merged_db.all_kmers().expect("Failed to get merged k-mers");
assert!(!all_kmers.is_empty(), "Merged database should have k-mers");
let kmer_map: std::collections::HashMap<_, _> = all_kmers.into_iter().collect();
assert_eq!(kmer_map.get(&0x1234), Some(&15)); assert_eq!(kmer_map.get(&0x5678), Some(&20));
assert_eq!(kmer_map.get(&0x9ABC), Some(&55)); assert_eq!(kmer_map.get(&0xDEF0), Some(&15));
println!("Memory usage: {} bytes", monitor.peak_usage());
println!("Memory increase: {} bytes", monitor.increase());
assert!(monitor.peak_usage() < constraints::SMALL.max_usage,
"Memory usage should be within small constraint");
}
}