#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MergeStrategy {
FullSemantic,
KeyPathOnly,
SectionBased,
}
pub fn optimal_merge_strategy(file_size: usize) -> MergeStrategy {
if file_size < 1024 {
MergeStrategy::FullSemantic
} else if file_size < 100_000 {
MergeStrategy::KeyPathOnly
} else {
MergeStrategy::SectionBased
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_small_file() {
assert_eq!(optimal_merge_strategy(512), MergeStrategy::FullSemantic);
}
#[test]
fn test_boundary_small() {
assert_eq!(optimal_merge_strategy(1023), MergeStrategy::FullSemantic);
}
#[test]
fn test_medium_file() {
assert_eq!(optimal_merge_strategy(2048), MergeStrategy::KeyPathOnly);
}
#[test]
fn test_boundary_medium() {
assert_eq!(optimal_merge_strategy(99_999), MergeStrategy::KeyPathOnly);
}
#[test]
fn test_large_file() {
assert_eq!(optimal_merge_strategy(100_000), MergeStrategy::SectionBased);
}
#[test]
fn test_very_large_file() {
assert_eq!(optimal_merge_strategy(10_000_000), MergeStrategy::SectionBased);
}
#[test]
fn test_zero_size() {
assert_eq!(optimal_merge_strategy(0), MergeStrategy::FullSemantic);
}
}